From 11a2c6c3fa062cb39c2c85404949e3a851851513 Mon Sep 17 00:00:00 2001 From: Nathan Dunn Date: Mon, 16 Sep 2019 15:04:46 -0700 Subject: [PATCH] updated to add rest doc --- .../org/bbop/apollo/OrganismController.groovy | 2592 +++++++------- web-app/js/restapidoc/restapidoc.json | 3175 +++++++++-------- 2 files changed, 2902 insertions(+), 2865 deletions(-) diff --git a/grails-app/controllers/org/bbop/apollo/OrganismController.groovy b/grails-app/controllers/org/bbop/apollo/OrganismController.groovy index ecb9457122..2554fc1228 100644 --- a/grails-app/controllers/org/bbop/apollo/OrganismController.groovy +++ b/grails-app/controllers/org/bbop/apollo/OrganismController.groovy @@ -3,9 +3,7 @@ package org.bbop.apollo import grails.converters.JSON import grails.transaction.NotTransactional import grails.transaction.Transactional -import groovy.io.FileType import htsjdk.samtools.reference.FastaSequenceIndexCreator -import org.apache.commons.io.FileUtils import org.bbop.apollo.gwt.shared.FeatureStringEnum import org.bbop.apollo.gwt.shared.GlobalPermissionEnum import org.bbop.apollo.gwt.shared.PermissionEnum @@ -27,7 +25,6 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile import javax.servlet.http.HttpServletResponse import java.nio.file.FileSystems import java.nio.file.Path -import java.util.zip.GZIPOutputStream import static org.springframework.http.HttpStatus.NOT_FOUND @@ -35,686 +32,686 @@ import static org.springframework.http.HttpStatus.NOT_FOUND @Transactional(readOnly = true) class OrganismController { - static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"] - - def sequenceService - def permissionService - def requestHandlingService - def preferenceService - def organismService - def reportService - def configWrapperService - def trackService - def fileService - - - @RestApiMethod(description = "Remove an organism", path = "/organism/deleteOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "json", paramType = RestApiParamType.QUERY, description = "Pass an Organism JSON object with an 'id' that corresponds to the organism to be removed") - ]) - @Transactional - def deleteOrganism() { - - try { - JSONObject organismJson = permissionService.handleInput(request, params) - log.debug "deleteOrganism ${organismJson}" - //if (permissionService.isUserBetterOrEqualRank(currentUser, GlobalPermissionEnum.INSTRUCTOR)){ - log.debug "organism ID: ${organismJson.id} vs ${organismJson.organism}" - Organism organism = Organism.findById(organismJson.id as Long) ?: Organism.findByCommonName(organismJson.organism) - if (!organism) { - def error = [error: "Organism ${organismJson.organism} not found"] - log.error(error.error) - render error as JSON - return - } - // to support webservice, get current user from session or input object - def currentUser = permissionService.getCurrentUser(organismJson) - String creatorMetaData = organism.getMetaData(FeatureStringEnum.CREATOR.value) - // only allow global admin or organism creator or organism administrative to delete the organism - if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.ADMIN) && !(creatorMetaData && currentUser.id.toString() == creatorMetaData) && !permissionService.checkPermissions(organismJson, organism, PermissionEnum.ADMINISTRATE)) { - def error = [error: 'not authorized to delete organism'] - log.error(error.error) - render error as JSON - return - } + static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"] + + def sequenceService + def permissionService + def requestHandlingService + def preferenceService + def organismService + def reportService + def configWrapperService + def trackService + def fileService + + + @RestApiMethod(description = "Remove an organism", path = "/organism/deleteOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "json", paramType = RestApiParamType.QUERY, description = "Pass an Organism JSON object with an 'id' that corresponds to the organism to be removed") + ]) + @Transactional + def deleteOrganism() { + + try { + JSONObject organismJson = permissionService.handleInput(request, params) + log.debug "deleteOrganism ${organismJson}" + //if (permissionService.isUserBetterOrEqualRank(currentUser, GlobalPermissionEnum.INSTRUCTOR)){ + log.debug "organism ID: ${organismJson.id} vs ${organismJson.organism}" + Organism organism = Organism.findById(organismJson.id as Long) ?: Organism.findByCommonName(organismJson.organism) + if (!organism) { + def error = [error: "Organism ${organismJson.organism} not found"] + log.error(error.error) + render error as JSON + return + } + // to support webservice, get current user from session or input object + def currentUser = permissionService.getCurrentUser(organismJson) + String creatorMetaData = organism.getMetaData(FeatureStringEnum.CREATOR.value) + // only allow global admin or organism creator or organism administrative to delete the organism + if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.ADMIN) && !(creatorMetaData && currentUser.id.toString() == creatorMetaData) && !permissionService.checkPermissions(organismJson, organism, PermissionEnum.ADMINISTRATE)) { + def error = [error: 'not authorized to delete organism'] + log.error(error.error) + render error as JSON + return + } + + UserOrganismPreference.deleteAll(UserOrganismPreference.findAllByOrganism(organism)) + OrganismFilter.deleteAll(OrganismFilter.findAllByOrganism(organism)) + organism.delete() + log.info "Success deleting organism: ${organismJson.organism}" + + if (organism.directory.startsWith(trackService.commonDataDirectory)) { + log.info "Directoy is part of the common data directory ${trackService.commonDataDirectory}, so deleting ${organism.directory}" + File directoryToRemove = new File(organism.directory) + assert directoryToRemove.deleteDir() + } + + render findAllOrganisms() - UserOrganismPreference.deleteAll(UserOrganismPreference.findAllByOrganism(organism)) - OrganismFilter.deleteAll(OrganismFilter.findAllByOrganism(organism)) - organism.delete() - log.info "Success deleting organism: ${organismJson.organism}" - - if (organism.directory.startsWith(trackService.commonDataDirectory)) { - log.info "Directoy is part of the common data directory ${trackService.commonDataDirectory}, so deleting ${organism.directory}" - File directoryToRemove = new File(organism.directory) - assert directoryToRemove.deleteDir() - } - - render findAllOrganisms() - - } - catch (Exception e) { - def error = [error: 'problem deleting organism: ' + e] - log.error(error.error) - render error as JSON - } } - - @RestApiMethod(description = "Delete an organism along with its data directory and returns a JSON object containing properties of the deleted organism", path = "/organism/deleteOrganismWithSequence", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - ]) - @Transactional - def deleteOrganismWithSequence() { - - JSONObject requestObject = permissionService.handleInput(request, params) - JSONObject responseObject = new JSONObject() - log.debug "deleteOrganism ${requestObject}" - - try { - //if (permissionService.isUserGlobalAdmin(permissionService.getCurrentUser(requestObject))) { - // use hasGolbalPermssions instead, which can validate the authentication - if (permissionService.hasGlobalPermissions(requestObject, GlobalPermissionEnum.ADMIN)) { - Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.organism) - if (organism) { - boolean dataAddedViaWebServices = organism.dataAddedViaWebServices == null ? false : organism.dataAddedViaWebServices - String organismDirectory = organism.directory - def organismAsJSON = organism as JSON - UserOrganismPreference.deleteAll(UserOrganismPreference.findAllByOrganism(organism)) - OrganismFilter.deleteAll(OrganismFilter.findAllByOrganism(organism)) - organism.delete() - - if (dataAddedViaWebServices) { - log.debug "organism ${organism.id} was added via web services;" - File dataDirectory = new File(organismDirectory) - if (dataDirectory.deleteDir()) { - log.info "dataDirectory: ${organismDirectory} deleted successfully." - } else { - log.error "Could not delete data directory: ${organismDirectory}." - responseObject.put("warn", "Could not delete data directory: ${organismDirectory}") - } - } else { - log.warn "organism ${organism.id} was not added via web services; Organism deleted but cannot delete data directory ${organismDirectory}" - responseObject.put("warn", "Organism ${organism.id} was not added via web services; Organism deleted but cannot delete data directory ${organismDirectory}.") - File extendedDataDirectory = trackService.getExtendedDataDirectory(organism) - if (extendedDataDirectory.exists()) { - log.info "Extended data directory found: ${extendedDataDirectory.absolutePath}" - if (extendedDataDirectory.deleteDir()) { - log.info "extended data directory found and deleted" - } else { - log.error "Extended data directory found but could not be deleted" - responseObject.put("warn", responseObject.get("warn") + " Extended data directory found but could not be deleted.") - } - } - } - //render organismAsJSON - responseObject.put("organism", JSON.parse(organismAsJSON.toString()) as JSONObject) - log.info "Success deleting organism: ${requestObject.organism}" - } else { - log.error "Organism: ${requestObject.organism} not found" - responseObject.put("error", "Organism: ${requestObject.organism} not found.") - } + catch (Exception e) { + def error = [error: 'problem deleting organism: ' + e] + log.error(error.error) + render error as JSON + } + } + + @RestApiMethod(description = "Delete an organism along with its data directory and returns a JSON object containing properties of the deleted organism", path = "/organism/deleteOrganismWithSequence", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + ]) + @Transactional + def deleteOrganismWithSequence() { + + JSONObject requestObject = permissionService.handleInput(request, params) + JSONObject responseObject = new JSONObject() + log.debug "deleteOrganism ${requestObject}" + + try { + //if (permissionService.isUserGlobalAdmin(permissionService.getCurrentUser(requestObject))) { + // use hasGolbalPermssions instead, which can validate the authentication + if (permissionService.hasGlobalPermissions(requestObject, GlobalPermissionEnum.ADMIN)) { + Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.organism) + if (organism) { + boolean dataAddedViaWebServices = organism.dataAddedViaWebServices == null ? false : organism.dataAddedViaWebServices + String organismDirectory = organism.directory + def organismAsJSON = organism as JSON + UserOrganismPreference.deleteAll(UserOrganismPreference.findAllByOrganism(organism)) + OrganismFilter.deleteAll(OrganismFilter.findAllByOrganism(organism)) + organism.delete() + + if (dataAddedViaWebServices) { + log.debug "organism ${organism.id} was added via web services;" + File dataDirectory = new File(organismDirectory) + if (dataDirectory.deleteDir()) { + log.info "dataDirectory: ${organismDirectory} deleted successfully." } else { - log.error "username not authorized to delete organism" - responseObject.put("error", "username not authorized to delete organism.") + log.error "Could not delete data directory: ${organismDirectory}." + responseObject.put("warn", "Could not delete data directory: ${organismDirectory}") + } + } else { + log.warn "organism ${organism.id} was not added via web services; Organism deleted but cannot delete data directory ${organismDirectory}" + responseObject.put("warn", "Organism ${organism.id} was not added via web services; Organism deleted but cannot delete data directory ${organismDirectory}.") + File extendedDataDirectory = trackService.getExtendedDataDirectory(organism) + if (extendedDataDirectory.exists()) { + log.info "Extended data directory found: ${extendedDataDirectory.absolutePath}" + if (extendedDataDirectory.deleteDir()) { + log.info "extended data directory found and deleted" + } else { + log.error "Extended data directory found but could not be deleted" + responseObject.put("warn", responseObject.get("warn") + " Extended data directory found but could not be deleted.") + } } - } catch (Exception e) { - log.error(e.message) - responseObject.put("error", e.message) + } + //render organismAsJSON + responseObject.put("organism", JSON.parse(organismAsJSON.toString()) as JSONObject) + log.info "Success deleting organism: ${requestObject.organism}" + } else { + log.error "Organism: ${requestObject.organism} not found" + responseObject.put("error", "Organism: ${requestObject.organism} not found.") } + } else { + log.error "username not authorized to delete organism" + responseObject.put("error", "username not authorized to delete organism.") + } + } catch (Exception e) { + log.error(e.message) + responseObject.put("error", e.message) + } - render responseObject as JSON + render responseObject as JSON + } + + @RestApiMethod(description = "Remove features from an organism", path = "/organism/deleteOrganismFeatures", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism.") + , @RestApiParam(name = "sequences", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Comma-delimited sequence names on that organism if only certain sequences should be deleted.") + ]) + @NotTransactional + def deleteOrganismFeatures() { + JSONObject organismJson = permissionService.handleInput(request, params) + if (organismJson.username == "" || organismJson.organism == "" || organismJson.password == "") { + def error = ['error': 'Empty fields in request JSON'] + render error as JSON + log.error(error.error) + return + } + try { + if (!permissionService.hasPermissions(organismJson, PermissionEnum.ADMINISTRATE)) { + def error = [error: 'not authorized to delete all features from organism'] + log.error(error.error) + render error as JSON + return + } + + Organism organism = Organism.findByCommonName(organismJson.organism) + + if (!organism) { + organism = Organism.findById(organismJson.organism) + } + + if (!organism) { + throw new Exception("Can not find organism for ${organismJson.organism} to remove features of") + } + + if (organismJson.sequences) { + List sequenceNames = organismJson.sequences.toString().split(",") + List sequences = Sequence.findAllByOrganismAndNameInList(organism, sequenceNames) + organismService.deleteAllFeaturesForSequences(sequences) + } else { + organismService.deleteAllFeaturesForOrganism(organism) + } + + render [:] as JSON + } + catch (e) { + def error = [error: 'problem removing organism features for organism: ' + e] + render error as JSON + e.printStackTrace() + log.error(error.error) + } + } + + + @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/addOrganismWithSequence", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "species name") + , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "species genus") + , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for a BLAT database (e.g. a .2bit file) if not uploaded") + , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "a flag for whether the organism appears as in the public genomes list") + , @RestApiParam(name = "commonName", type = "string", paramType = RestApiParamType.QUERY, description = "commonName for an organism") + , @RestApiParam(name = "nonDefaultTranslationTable", type = "string", paramType = RestApiParamType.QUERY, description = "non-default translation table") + , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") + , @RestApiParam(name = "organismData", type = "file", paramType = RestApiParamType.QUERY, description = "zip or tar.gz compressed data directory (if other options not used). Blat data should include a .2bit suffix and be in a directory 'searchDatabaseData'") + , @RestApiParam(name = "sequenceData", type = "file", paramType = RestApiParamType.QUERY, description = "FASTA file (optionally compressed) to automatically upload with") + , @RestApiParam(name = "searchDatabaseData", type = "file", paramType = RestApiParamType.QUERY, description = "2bit file for blat search (optional)") + ]) + @Transactional + def addOrganismWithSequence() { + + + JSONObject returnObject = new JSONObject() + JSONObject requestObject = permissionService.handleInput(request, params) + log.info "adding organismwith SEQUENDE ${requestObject as String}" + String clientToken = requestObject.getString(FeatureStringEnum.CLIENT_TOKEN.value) + CommonsMultipartFile organismDataFile = request.getFile(FeatureStringEnum.ORGANISM_DATA.value) + CommonsMultipartFile sequenceDataFile = request.getFile(FeatureStringEnum.SEQUENCE_DATA.value) + CommonsMultipartFile searchDatabaseDataFile = request.getFile(FeatureStringEnum.SEARCH_DATABASE_DATA.value) + + if (!requestObject.containsKey(FeatureStringEnum.ORGANISM_NAME.value)) { + returnObject.put("error", "/addOrganismWithSequence requires '${FeatureStringEnum.ORGANISM_NAME.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return } - @RestApiMethod(description = "Remove features from an organism", path = "/organism/deleteOrganismFeatures", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism.") - , @RestApiParam(name = "sequences", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Comma-delimited sequence names on that organism if only certain sequences should be deleted.") - ]) - @NotTransactional - def deleteOrganismFeatures() { - JSONObject organismJson = permissionService.handleInput(request, params) - if (organismJson.username == "" || organismJson.organism == "" || organismJson.password == "") { - def error = ['error': 'Empty fields in request JSON'] - render error as JSON - log.error(error.error) - return - } - try { - if (!permissionService.hasPermissions(organismJson, PermissionEnum.ADMINISTRATE)) { - def error = [error: 'not authorized to delete all features from organism'] - log.error(error.error) - render error as JSON - return - } + if (organismDataFile == null && sequenceDataFile == null) { + returnObject.put("error", "/addOrganismWithSequence requires '${FeatureStringEnum.ORGANISM_DATA.value}' or ${FeatureStringEnum.SEQUENCE_DATA.value}.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - Organism organism = Organism.findByCommonName(organismJson.organism) + if (organismDataFile != null && sequenceDataFile != null) { + returnObject.put("error", "/addOrganismWithSequence requires ONLY one (not both) of '${FeatureStringEnum.ORGANISM_DATA.value}' or ${FeatureStringEnum.SEQUENCE_DATA.value}.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - if (!organism) { - organism = Organism.findById(organismJson.organism) + try { + if (permissionService.isUserGlobalAdmin(permissionService.getCurrentUser(requestObject))) { + String organismName = requestObject.get(FeatureStringEnum.ORGANISM_NAME.value) + def organism = new Organism( + commonName: organismName, + directory: trackService.commonDataDirectory, + blatdb: requestObject.blatdb ?: "", + genus: requestObject.genus ?: "", + obsolete: false, + valid: true, + species: requestObject.species ?: "", + metadata: requestObject.metadata ?: "", + publicMode: requestObject.publicMode ?: false, + nonDefaultTranslationTable: requestObject.nonDefaultTranslationTable ?: null, + dataAddedViaWebServices: true + ).save(failOnError: true, flush: true, insert: true) + def currentUser = permissionService.currentUser + organism.addMetaData("creator", currentUser.id.toString()) + File directory = trackService.getExtendedDataDirectory(organism) + + if (directory.mkdirs() && directory.setWritable(true)) { + + if (organismDataFile) { + log.debug "Successfully created directory ${directory.absolutePath}" + File archiveFile = new File(organismDataFile.getOriginalFilename()) + organismDataFile.transferTo(archiveFile) + try { + fileService.decompress(archiveFile, directory.absolutePath, null, false) + log.debug "Adding ${organismName} with directory: ${directory.absolutePath}" + organism.directory = directory.absolutePath + + // if directory has a "searchDatabaseData" directory then any file in that that is a 2bit is the blatdb + String blatdb = organismService.findBlatDB(directory.absolutePath) + if (blatdb) { + organism.blatdb = blatdb + } + organism.save() + sequenceService.loadRefSeqs(organism) + preferenceService.setCurrentOrganism(permissionService.getCurrentUser(requestObject), organism, clientToken) + findAllOrganisms() } - - if (!organism) { - throw new Exception("Can not find organism for ${organismJson.organism} to remove features of") + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + organism.delete() + render returnObject + return } + } else if (sequenceDataFile) { - if (organismJson.sequences) { - List sequenceNames = organismJson.sequences.toString().split(",") - List sequences = Sequence.findAllByOrganismAndNameInList(organism, sequenceNames) - organismService.deleteAllFeaturesForSequences(sequences) - } else { - organismService.deleteAllFeaturesForOrganism(organism) + SequenceTypeEnum sequenceTypeEnum = SequenceTypeEnum.getSequenceTypeForFile(sequenceDataFile.getOriginalFilename()) + if (sequenceTypeEnum == null) { + returnObject.put("error", "Bad file input: " + sequenceDataFile.originalFilename) + render returnObject + return } - render [:] as JSON - } - catch (e) { - def error = [error: 'problem removing organism features for organism: ' + e] - render error as JSON - e.printStackTrace() - log.error(error.error) - } - } - - - @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/addOrganismWithSequence", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "species name") - , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "species genus") - , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for a BLAT database (e.g. a .2bit file) if not uploaded") - , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "a flag for whether the organism appears as in the public genomes list") - , @RestApiParam(name = "commonName", type = "string", paramType = RestApiParamType.QUERY, description = "commonName for an organism") - , @RestApiParam(name = "nonDefaultTranslationTable", type = "string", paramType = RestApiParamType.QUERY, description = "non-default translation table") - , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") - , @RestApiParam(name = "organismData", type = "file", paramType = RestApiParamType.QUERY, description = "zip or tar.gz compressed data directory (if other options not used). Blat data should include a .2bit suffix and be in a directory 'searchDatabaseData'") - , @RestApiParam(name = "sequenceData", type = "file", paramType = RestApiParamType.QUERY, description = "FASTA file (optionally compressed) to automatically upload with") - , @RestApiParam(name = "searchDatabaseData", type = "file", paramType = RestApiParamType.QUERY, description = "2bit file for blat search (optional)") - ]) - @Transactional - def addOrganismWithSequence() { - - - JSONObject returnObject = new JSONObject() - JSONObject requestObject = permissionService.handleInput(request, params) - log.info "adding organismwith SEQUENDE ${requestObject as String}" - String clientToken = requestObject.getString(FeatureStringEnum.CLIENT_TOKEN.value) - CommonsMultipartFile organismDataFile = request.getFile(FeatureStringEnum.ORGANISM_DATA.value) - CommonsMultipartFile sequenceDataFile = request.getFile(FeatureStringEnum.SEQUENCE_DATA.value) - CommonsMultipartFile searchDatabaseDataFile = request.getFile(FeatureStringEnum.SEARCH_DATABASE_DATA.value) - - if (!requestObject.containsKey(FeatureStringEnum.ORGANISM_NAME.value)) { - returnObject.put("error", "/addOrganismWithSequence requires '${FeatureStringEnum.ORGANISM_NAME.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } - - if (organismDataFile == null && sequenceDataFile == null) { - returnObject.put("error", "/addOrganismWithSequence requires '${FeatureStringEnum.ORGANISM_DATA.value}' or ${FeatureStringEnum.SEQUENCE_DATA.value}.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } - - if (organismDataFile != null && sequenceDataFile != null) { - returnObject.put("error", "/addOrganismWithSequence requires ONLY one (not both) of '${FeatureStringEnum.ORGANISM_DATA.value}' or ${FeatureStringEnum.SEQUENCE_DATA.value}.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } - - try { - if (permissionService.isUserGlobalAdmin(permissionService.getCurrentUser(requestObject))) { - String organismName = requestObject.get(FeatureStringEnum.ORGANISM_NAME.value) - def organism = new Organism( - commonName: organismName, - directory: trackService.commonDataDirectory, - blatdb: requestObject.blatdb ?: "", - genus: requestObject.genus ?: "", - obsolete: false, - valid: true, - species: requestObject.species ?: "", - metadata: requestObject.metadata ?: "", - publicMode: requestObject.publicMode ?: false, - nonDefaultTranslationTable: requestObject.nonDefaultTranslationTable ?: null, - dataAddedViaWebServices: true - ).save(failOnError: true, flush: true, insert: true) - def currentUser = permissionService.currentUser - organism.addMetaData("creator", currentUser.id.toString()) - File directory = trackService.getExtendedDataDirectory(organism) - - if (directory.mkdirs() && directory.setWritable(true)) { - - if (organismDataFile) { - log.debug "Successfully created directory ${directory.absolutePath}" - File archiveFile = new File(organismDataFile.getOriginalFilename()) - organismDataFile.transferTo(archiveFile) - try { - fileService.decompress(archiveFile, directory.absolutePath, null, false) - log.debug "Adding ${organismName} with directory: ${directory.absolutePath}" - organism.directory = directory.absolutePath - - // if directory has a "searchDatabaseData" directory then any file in that that is a 2bit is the blatdb - String blatdb = organismService.findBlatDB(directory.absolutePath) - if(blatdb){ - organism.blatdb = blatdb - } - organism.save() - sequenceService.loadRefSeqs(organism) - preferenceService.setCurrentOrganism(permissionService.getCurrentUser(requestObject), organism, clientToken) - findAllOrganisms() - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - organism.delete() - render returnObject - return - } - } else if (sequenceDataFile) { - - SequenceTypeEnum sequenceTypeEnum = SequenceTypeEnum.getSequenceTypeForFile(sequenceDataFile.getOriginalFilename()) - if (sequenceTypeEnum == null) { - returnObject.put("error", "Bad file input: " + sequenceDataFile.originalFilename) - render returnObject - return - } - - // TODO: put this in a temp directory? ? ? - try { - File rawDirectory = new File(directory.absolutePath + "/seq") - assert rawDirectory.mkdir() - assert rawDirectory.setWritable(true) - File archiveFile = new File(rawDirectory.absolutePath + File.separator + organismName + "." + sequenceTypeEnum.suffix) - sequenceDataFile.transferTo(archiveFile) - organism.directory = directory.absolutePath - - // decompress if need be - if (sequenceTypeEnum.compression != null) { - List fileNames = fileService.decompress(archiveFile, rawDirectory.absolutePath) - // move the filenames to the same original name, let's assume there is one - File oldFile = new File(fileNames[0]) - assert oldFile.exists() + // TODO: put this in a temp directory? ? ? + try { + File rawDirectory = new File(directory.absolutePath + "/seq") + assert rawDirectory.mkdir() + assert rawDirectory.setWritable(true) + File archiveFile = new File(rawDirectory.absolutePath + File.separator + organismName + "." + sequenceTypeEnum.suffix) + sequenceDataFile.transferTo(archiveFile) + organism.directory = directory.absolutePath + + // decompress if need be + if (sequenceTypeEnum.compression != null) { + List fileNames = fileService.decompress(archiveFile, rawDirectory.absolutePath) + // move the filenames to the same original name, let's assume there is one + File oldFile = new File(fileNames[0]) + assert oldFile.exists() // assert oldFile.absolutePath.endsWith(".fa") - File newFile = new File(rawDirectory.absolutePath + File.separator + organismName + ".fa") - oldFile.renameTo(newFile) - } - - println "search db file : ${searchDatabaseDataFile.name} ${searchDatabaseDataFile.size} ${searchDatabaseDataFile.originalFilename} ${searchDatabaseDataFile.contentType}" - if(searchDatabaseDataFile!=null){ - File searchDirectory = new File(directory.absolutePath + "/search") - assert searchDirectory.mkdir() - assert searchDirectory.setWritable(true) - File searchFile = new File(searchDirectory.absolutePath + File.separator + searchDatabaseDataFile.originalFilename) - println "search file: ${searchFile.absolutePath}" - searchDatabaseDataFile.transferTo(searchFile) - organism.blatdb = searchFile.absolutePath - } - - organism.save() - - - String trackListJson = TrackDefaults.getIndexedFastaConfig(organismName) - File trackListFile = new File(directory.absolutePath + File.separator + "trackList.json") - trackListFile.write(trackListJson) - - // create an index - Path path = FileSystems.getDefault().getPath(rawDirectory.absolutePath + File.separator + organismName + ".fa") - FastaSequenceIndexCreator.create(path, true) - - sequenceService.loadRefSeqs(organism) - preferenceService.setCurrentOrganism(permissionService.getCurrentUser(requestObject), organism, clientToken) - findAllOrganisms() - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - organism.delete() - } - - } else { - throw new RuntimeException("Not sure how we got here ") - } - } else { - log.error "Could not create ${directory.absolutePath}" - returnObject.put("error", "Could not create ${directory.absolutePath}.") - organism.delete() - } - } else { - log.error "username ${requestObject.get(FeatureStringEnum.USERNAME.value)} is not authorized to add organisms" - returnObject.put("error", "username ${requestObject.get(FeatureStringEnum.USERNAME.value)} is not authorized to add organisms.") + File newFile = new File(rawDirectory.absolutePath + File.separator + organismName + ".fa") + oldFile.renameTo(newFile) + } + + println "search db file : ${searchDatabaseDataFile.name} ${searchDatabaseDataFile.size} ${searchDatabaseDataFile.originalFilename} ${searchDatabaseDataFile.contentType}" + if (searchDatabaseDataFile != null) { + File searchDirectory = new File(directory.absolutePath + "/search") + assert searchDirectory.mkdir() + assert searchDirectory.setWritable(true) + File searchFile = new File(searchDirectory.absolutePath + File.separator + searchDatabaseDataFile.originalFilename) + println "search file: ${searchFile.absolutePath}" + searchDatabaseDataFile.transferTo(searchFile) + organism.blatdb = searchFile.absolutePath + } + + organism.save() + + + String trackListJson = TrackDefaults.getIndexedFastaConfig(organismName) + File trackListFile = new File(directory.absolutePath + File.separator + "trackList.json") + trackListFile.write(trackListJson) + + // create an index + Path path = FileSystems.getDefault().getPath(rawDirectory.absolutePath + File.separator + organismName + ".fa") + FastaSequenceIndexCreator.create(path, true) + + sequenceService.loadRefSeqs(organism) + preferenceService.setCurrentOrganism(permissionService.getCurrentUser(requestObject), organism, clientToken) + findAllOrganisms() } + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + organism.delete() + } + + } else { + throw new RuntimeException("Not sure how we got here ") + } + } else { + log.error "Could not create ${directory.absolutePath}" + returnObject.put("error", "Could not create ${directory.absolutePath}.") + organism.delete() } - catch (e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - } + } else { + log.error "username ${requestObject.get(FeatureStringEnum.USERNAME.value)} is not authorized to add organisms" + returnObject.put("error", "username ${requestObject.get(FeatureStringEnum.USERNAME.value)} is not authorized to add organisms.") + } + } + catch (e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + } - render returnObject as JSON + render returnObject as JSON + } + + @RestApiMethod(description = "Removes an added track from an existing organism returning a JSON object containing all tracks for the current organism.", path = "/organism/removeTrackFromOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + , @RestApiParam(name = "trackLabel", type = "string", paramType = RestApiParamType.QUERY, description = "Name of track") + ]) + @Transactional + def removeTrackFromOrganism() { + JSONObject returnObject = new JSONObject() + JSONObject requestObject = permissionService.handleInput(request, params) + log.info "removing track from organism with ${requestObject}" + + if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { + returnObject.put("error", "/removeTrackFromOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return } - @RestApiMethod(description = "Removes an added track from an existing organism returning a JSON object containing all tracks for the current organism.", path = "/organism/removeTrackFromOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - , @RestApiParam(name = "trackLabel", type = "string", paramType = RestApiParamType.QUERY, description = "Name of track") - ]) - @Transactional - def removeTrackFromOrganism() { - JSONObject returnObject = new JSONObject() - JSONObject requestObject = permissionService.handleInput(request, params) - log.info "removing track from organism with ${requestObject}" - - if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { - returnObject.put("error", "/removeTrackFromOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + if (!requestObject.containsKey(FeatureStringEnum.TRACK_LABEL.value)) { + returnObject.put("error", "/removeTrackFromOrganism requires '${FeatureStringEnum.TRACK_LABEL.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - if (!requestObject.containsKey(FeatureStringEnum.TRACK_LABEL.value)) { - returnObject.put("error", "/removeTrackFromOrganism requires '${FeatureStringEnum.TRACK_LABEL.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return + try { + permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) + Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)?.id) + // find in the extended track list and remove + File extendedDirectory = trackService.getExtendedDataDirectory(organism) + if (!extendedDirectory.exists()) { + returnObject.put("error", "No temporary directory found to remove tracks from ${extendedDirectory.absolutePath}") + render returnObject as JSON + return + } + File extendedTrackListJsonFile + if (new File(extendedDirectory.absolutePath + File.separator + TrackService.EXTENDED_TRACKLIST).exists()) { + extendedTrackListJsonFile = new File(extendedDirectory.absolutePath + File.separator + TrackService.EXTENDED_TRACKLIST) + } else { + if (organism.directory.contains(trackService.commonDataDirectory)) { + extendedTrackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) + } else { + throw new RuntimeException("Can not delete tracks from a non-temporary directory: ${extendedTrackListJsonFile.absolutePath}") } + } - try { - permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) - Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)?.id) - // find in the extended track list and remove - File extendedDirectory = trackService.getExtendedDataDirectory(organism) - if (!extendedDirectory.exists()) { - returnObject.put("error", "No temporary directory found to remove tracks from ${extendedDirectory.absolutePath}") - render returnObject as JSON - return - } - File extendedTrackListJsonFile - if (new File(extendedDirectory.absolutePath + File.separator + TrackService.EXTENDED_TRACKLIST).exists()) { - extendedTrackListJsonFile = new File(extendedDirectory.absolutePath + File.separator + TrackService.EXTENDED_TRACKLIST) - } else { - if (organism.directory.contains(trackService.commonDataDirectory)) { - extendedTrackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) - } else { - throw new RuntimeException("Can not delete tracks from a non-temporary directory: ${extendedTrackListJsonFile.absolutePath}") - } - } - - JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) - JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) + JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - String trackLabel = requestObject.getString(FeatureStringEnum.TRACK_LABEL.value) - JSONObject trackObject = trackService.findTrackFromArray(extendedTracksArray, trackLabel) - extendedTracksArray = trackService.removeTrackFromArray(extendedTracksArray, trackLabel) - extendedTrackListObject.put(FeatureStringEnum.TRACKS.value, extendedTracksArray) - extendedTrackListJsonFile.write(extendedTrackListObject.toString()) + String trackLabel = requestObject.getString(FeatureStringEnum.TRACK_LABEL.value) + JSONObject trackObject = trackService.findTrackFromArray(extendedTracksArray, trackLabel) + extendedTracksArray = trackService.removeTrackFromArray(extendedTracksArray, trackLabel) + extendedTrackListObject.put(FeatureStringEnum.TRACKS.value, extendedTracksArray) + extendedTrackListJsonFile.write(extendedTrackListObject.toString()) - TrackTypeEnum trackTypeEnum = TrackTypeEnum.valueOf(trackObject.apollo.type) - // delete any files with the patterns of key.suffix and key.suffixIndex + TrackTypeEnum trackTypeEnum = TrackTypeEnum.valueOf(trackObject.apollo.type) + // delete any files with the patterns of key.suffix and key.suffixIndex - for (def suffix in trackTypeEnum.suffix) { - File fileToDelete = new File(extendedDirectory.absolutePath + File.separator + "raw/" + trackObject.label.replaceAll(" ", "_") + ".${suffix}") - if (fileToDelete.exists()) { - assert fileToDelete.delete() - } - } - for (def suffix in trackTypeEnum.suffixIndex) { - File fileToDelete = new File(extendedDirectory.absolutePath + File.separator + "raw/" + trackObject.label.replaceAll(" ", "_") + ".${suffix}") - if (fileToDelete.exists()) { - assert fileToDelete.delete() - } - } - render returnObject as JSON - } catch (Exception ce) { - log.error ce.message - returnObject.put("error", ce.message) - render returnObject as JSON - return + for (def suffix in trackTypeEnum.suffix) { + File fileToDelete = new File(extendedDirectory.absolutePath + File.separator + "raw/" + trackObject.label.replaceAll(" ", "_") + ".${suffix}") + if (fileToDelete.exists()) { + assert fileToDelete.delete() } - + } + for (def suffix in trackTypeEnum.suffixIndex) { + File fileToDelete = new File(extendedDirectory.absolutePath + File.separator + "raw/" + trackObject.label.replaceAll(" ", "_") + ".${suffix}") + if (fileToDelete.exists()) { + assert fileToDelete.delete() + } + } + render returnObject as JSON + } catch (Exception ce) { + log.error ce.message + returnObject.put("error", ce.message) + render returnObject as JSON + return } + } + + + @RestApiMethod(description = "Adds a track to an existing organism returning a JSON object containing all tracks for the current organism.", path = "/organism/addTrackToOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + , @RestApiParam(name = "trackData", type = "string", paramType = RestApiParamType.QUERY, description = "zip or tar.gz compressed track data") + , @RestApiParam(name = "trackFile", type = "string", paramType = RestApiParamType.QUERY, description = "track file (*.bam, *.vcf, *.bw, *gff)") + , @RestApiParam(name = "trackFileIndex", type = "string", paramType = RestApiParamType.QUERY, description = "index (*.bai, *.tbi)") + , @RestApiParam(name = "trackConfig", type = "string", paramType = RestApiParamType.QUERY, description = "Track configuration (JBrowse JSON)") + ]) + @Transactional + def addTrackToOrganism() { + + JSONObject returnObject = new JSONObject() + JSONObject requestObject = permissionService.handleInput(request, params) + String pathToJBrowseBinaries = servletContext.getRealPath("/jbrowse/bin") + log.debug "path to JBrowse binaries ${pathToJBrowseBinaries}" + + if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { + returnObject.put("error", "/addTrackToOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - @RestApiMethod(description = "Adds a track to an existing organism returning a JSON object containing all tracks for the current organism.", path = "/organism/addTrackToOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - , @RestApiParam(name = "trackData", type = "string", paramType = RestApiParamType.QUERY, description = "zip or tar.gz compressed track data") - , @RestApiParam(name = "trackFile", type = "string", paramType = RestApiParamType.QUERY, description = "track file (*.bam, *.vcf, *.bw, *gff)") - , @RestApiParam(name = "trackFileIndex", type = "string", paramType = RestApiParamType.QUERY, description = "index (*.bai, *.tbi)") - , @RestApiParam(name = "trackConfig", type = "string", paramType = RestApiParamType.QUERY, description = "Track configuration (JBrowse JSON)") - ]) - @Transactional - def addTrackToOrganism() { - - JSONObject returnObject = new JSONObject() - JSONObject requestObject = permissionService.handleInput(request, params) - String pathToJBrowseBinaries = servletContext.getRealPath("/jbrowse/bin") - log.debug "path to JBrowse binaries ${pathToJBrowseBinaries}" - - if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { - returnObject.put("error", "/addTrackToOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } - - if (requestObject.containsKey(FeatureStringEnum.TRACK_DATA.value) && requestObject.containsKey("trackFile")) { - returnObject.put("error", "Both 'trackData' and 'trackFile' specified; /addTrackToOrganism requires either '${FeatureStringEnum.TRACK_DATA.value}' or 'trackFile'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + if (requestObject.containsKey(FeatureStringEnum.TRACK_DATA.value) && requestObject.containsKey("trackFile")) { + returnObject.put("error", "Both 'trackData' and 'trackFile' specified; /addTrackToOrganism requires either '${FeatureStringEnum.TRACK_DATA.value}' or 'trackFile'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - if (!requestObject.containsKey(FeatureStringEnum.TRACK_DATA.value) && !requestObject.containsKey("trackFile")) { - returnObject.put("error", "/addTrackToOrganism requires either '${FeatureStringEnum.TRACK_DATA.value}' or 'trackFile'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + if (!requestObject.containsKey(FeatureStringEnum.TRACK_DATA.value) && !requestObject.containsKey("trackFile")) { + returnObject.put("error", "/addTrackToOrganism requires either '${FeatureStringEnum.TRACK_DATA.value}' or 'trackFile'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - if (!requestObject.containsKey(FeatureStringEnum.TRACK_CONFIG.value)) { - returnObject.put("error", "/addTrackToOrganism requires '${FeatureStringEnum.TRACK_CONFIG.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + if (!requestObject.containsKey(FeatureStringEnum.TRACK_CONFIG.value)) { + returnObject.put("error", "/addTrackToOrganism requires '${FeatureStringEnum.TRACK_CONFIG.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - JSONObject trackConfigObject - try { - trackConfigObject = JSON.parse(params.get(FeatureStringEnum.TRACK_CONFIG.value) as String) as JSONObject - } catch (ConverterException ce) { - log.error ce.message - returnObject.put("error", ce.message) - render returnObject as JSON - return - } + JSONObject trackConfigObject + try { + trackConfigObject = JSON.parse(params.get(FeatureStringEnum.TRACK_CONFIG.value) as String) as JSONObject + } catch (ConverterException ce) { + log.error ce.message + returnObject.put("error", ce.message) + render returnObject as JSON + return + } - if (!trackConfigObject.containsKey(FeatureStringEnum.LABEL.value) || !trackConfigObject.containsKey(FeatureStringEnum.URL_TEMPLATE.value)) { - log.error "trackConfig requires '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'" - returnObject.put("error", "trackConfig requires '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'.") - render returnObject as JSON - return - } + if (!trackConfigObject.containsKey(FeatureStringEnum.LABEL.value) || !trackConfigObject.containsKey(FeatureStringEnum.URL_TEMPLATE.value)) { + log.error "trackConfig requires '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'" + returnObject.put("error", "trackConfig requires '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'.") + render returnObject as JSON + return + } - try { - permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) + try { + permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) // log.debug "user ${requestObject.get(FeatureStringEnum.USERNAME.value)} is admin" - Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) - - if (organism) { - log.debug "Adding track to organism: ${organism.commonName}" - String organismDirectoryName = organism.directory - File organismDirectory = new File(organismDirectoryName) - File commonDataDirectory = new File(trackService.commonDataDirectory) - - CommonsMultipartFile trackDataFile = request.getFile(FeatureStringEnum.TRACK_DATA.value) - CommonsMultipartFile trackFile = request.getFile(FeatureStringEnum.TRACK_FILE.value) - CommonsMultipartFile trackFileIndex = request.getFile(FeatureStringEnum.TRACK_FILE_INDEX.value) - - if (organismDirectory.getParentFile().getCanonicalPath() == commonDataDirectory.getCanonicalPath()) { - // organism data is in common data directory - log.info "organism data is in common data directory" - File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) - JSONObject trackListObject = JSON.parse(trackListJsonFile.text) - JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - - if (trackDataFile) { - // check if track exists in trackList.json - if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { - // add track config to trackList.json - tracksArray.add(trackConfigObject) - // unpack track data into organism directory - File archiveFile = new File(trackDataFile.getOriginalFilename()) - trackDataFile.transferTo(archiveFile) - try { - String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) - String trackDirectoryName = urlTemplate.split("/").first() - String path = organismDirectoryName + File.separator + trackDirectoryName - fileService.decompress(archiveFile, path, trackConfigObject.get(FeatureStringEnum.LABEL.value), true) - - // write to trackList.json - def trackListJsonWriter = trackListJsonFile.newWriter() - trackListJsonWriter << trackListObject.toString(4) - trackListJsonWriter.close() - returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - } - } else { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") - } - } else { - // trackDataFile is null; use data from trackFile and trackFileIndex, if available - if (trackFile) { - if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { - // add track config to trackList.json - tracksArray.add(trackConfigObject) - try { - String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) - String trackDirectoryName = urlTemplate.split("/").first() - String path = organismDirectoryName + File.separator + trackDirectoryName + Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) + + if (organism) { + log.debug "Adding track to organism: ${organism.commonName}" + String organismDirectoryName = organism.directory + File organismDirectory = new File(organismDirectoryName) + File commonDataDirectory = new File(trackService.commonDataDirectory) + + CommonsMultipartFile trackDataFile = request.getFile(FeatureStringEnum.TRACK_DATA.value) + CommonsMultipartFile trackFile = request.getFile(FeatureStringEnum.TRACK_FILE.value) + CommonsMultipartFile trackFileIndex = request.getFile(FeatureStringEnum.TRACK_FILE_INDEX.value) + + if (organismDirectory.getParentFile().getCanonicalPath() == commonDataDirectory.getCanonicalPath()) { + // organism data is in common data directory + log.info "organism data is in common data directory" + File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) + JSONObject trackListObject = JSON.parse(trackListJsonFile.text) + JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + + if (trackDataFile) { + // check if track exists in trackList.json + if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { + // add track config to trackList.json + tracksArray.add(trackConfigObject) + // unpack track data into organism directory + File archiveFile = new File(trackDataFile.getOriginalFilename()) + trackDataFile.transferTo(archiveFile) + try { + String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) + String trackDirectoryName = urlTemplate.split("/").first() + String path = organismDirectoryName + File.separator + trackDirectoryName + fileService.decompress(archiveFile, path, trackConfigObject.get(FeatureStringEnum.LABEL.value), true) + + // write to trackList.json + def trackListJsonWriter = trackListJsonFile.newWriter() + trackListJsonWriter << trackListObject.toString(4) + trackListJsonWriter.close() + returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) + } + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + } + } else { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") + } + } else { + // trackDataFile is null; use data from trackFile and trackFileIndex, if available + if (trackFile) { + if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { + // add track config to trackList.json + tracksArray.add(trackConfigObject) + try { + String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) + String trackDirectoryName = urlTemplate.split("/").first() + String path = organismDirectoryName + File.separator + trackDirectoryName // fileService.store(trackFile, path) - TrackTypeEnum trackTypeEnum = org.bbop.apollo.gwt.shared.track.TrackTypeEnum.valueOf(trackConfigObject.apollo.type) - String newFileName = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffix[0] : trackFile.originalFilename - File destinationFile = fileService.storeWithNewName(trackFile, path, trackConfigObject.key, newFileName) - if (trackFileIndex.originalFilename) { - String newFileNameIndex = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffixIndex[0] : trackFileIndex.originalFilename + TrackTypeEnum trackTypeEnum = org.bbop.apollo.gwt.shared.track.TrackTypeEnum.valueOf(trackConfigObject.apollo.type) + String newFileName = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffix[0] : trackFile.originalFilename + File destinationFile = fileService.storeWithNewName(trackFile, path, trackConfigObject.key, newFileName) + if (trackFileIndex.originalFilename) { + String newFileNameIndex = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffixIndex[0] : trackFileIndex.originalFilename // fileService.store(trackFileIndex, path) - fileService.storeWithNewName(trackFileIndex, path, trackConfigObject.key, newFileNameIndex) - } - - if (trackTypeEnum == TrackTypeEnum.GFF3_JSON || trackTypeEnum == TrackTypeEnum.GFF3_JSON_CANVAS) { - trackService.generateJSONForGff3(destinationFile, organismDirectoryName, pathToJBrowseBinaries,trackConfigObject.apollo.topType) - } - - // write to trackList.json - def trackListJsonWriter = trackListJsonFile.newWriter() - trackListJsonWriter << trackListObject.toString(4) - trackListJsonWriter.close() - returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - } - } else { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") - } - } - } - } else { - // organism data is somewhere on the server where we don't want to modify anything - File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) - JSONObject trackListObject = JSON.parse(trackListJsonFile.text) - JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") - } else { - File extendedDirectory = trackService.getExtendedDataDirectory(organism) - if (!extendedDirectory.exists()) { - // make a new extended organism directory in common data directory - if (extendedDirectory.mkdirs() && extendedDirectory.setWritable(true)) { - // write extendedTrackList.json - File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << "{'${FeatureStringEnum.TRACKS.value}':[]}" - trackListJsonWriter.close() - } else { - log.error "Cannot create directory ${extendedDirectory.absolutePath}" - returnObject.put("error", "Cannot create directory ${extendedDirectory.absolutePath}.") - } - } - - if (trackDataFile) { - File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) - JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) - JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - // check if track exists in extendedTrackList.json - if (trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${extendedDirectory.absolutePath}/${trackService.EXTENDED_TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${extendedDirectory.absolutePath}/${trackService.EXTENDED_TRACKLIST}.") - } else { - // add track config to extendedTrackList.json - extendedTracksArray.add(trackConfigObject) - // unpack track data into organism directory - File archiveFile = new File(trackDataFile.getOriginalFilename()) - trackDataFile.transferTo(archiveFile) - try { - String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) - String trackDirectoryName = urlTemplate.split("/").first() - String path = extendedDirectory.absolutePath + File.separator + trackDirectoryName - fileService.decompress(archiveFile, path, trackConfigObject.get(FeatureStringEnum.LABEL.value), true) - - // write to trackList.json - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << extendedTrackListObject.toString(4) - trackListJsonWriter.close() - returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray + extendedTracksArray) - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - } - } - } else { - if (trackFile) { - if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { - // add track config to trackList.json - File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) - if (!extendedTrackListJsonFile.exists()) { - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << "{'${FeatureStringEnum.TRACKS.value}':[]}" - trackListJsonWriter.close() - } else { - log.info "FILE EXISTS, so nothing to do ${extendedTrackListJsonFile.text}" - } - JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) - JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - if (trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") - } else { - try { - String path = extendedDirectory.absolutePath + File.separator + "raw" - TrackTypeEnum trackTypeEnum = org.bbop.apollo.gwt.shared.track.TrackTypeEnum.valueOf(trackConfigObject.apollo.type) - - // TODO: if the suffix is 0 does not end with gzip, then we need to run it through the decrompressor - String newFileName = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffix[0] : trackFile.originalFilename + fileService.storeWithNewName(trackFileIndex, path, trackConfigObject.key, newFileNameIndex) + } + + if (trackTypeEnum == TrackTypeEnum.GFF3_JSON || trackTypeEnum == TrackTypeEnum.GFF3_JSON_CANVAS) { + trackService.generateJSONForGff3(destinationFile, organismDirectoryName, pathToJBrowseBinaries, trackConfigObject.apollo.topType) + } + + // write to trackList.json + def trackListJsonWriter = trackListJsonFile.newWriter() + trackListJsonWriter << trackListObject.toString(4) + trackListJsonWriter.close() + returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) + } + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + } + } else { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") + } + } + } + } else { + // organism data is somewhere on the server where we don't want to modify anything + File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) + JSONObject trackListObject = JSON.parse(trackListJsonFile.text) + JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") + } else { + File extendedDirectory = trackService.getExtendedDataDirectory(organism) + if (!extendedDirectory.exists()) { + // make a new extended organism directory in common data directory + if (extendedDirectory.mkdirs() && extendedDirectory.setWritable(true)) { + // write extendedTrackList.json + File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << "{'${FeatureStringEnum.TRACKS.value}':[]}" + trackListJsonWriter.close() + } else { + log.error "Cannot create directory ${extendedDirectory.absolutePath}" + returnObject.put("error", "Cannot create directory ${extendedDirectory.absolutePath}.") + } + } + + if (trackDataFile) { + File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) + JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) + JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + // check if track exists in extendedTrackList.json + if (trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${extendedDirectory.absolutePath}/${trackService.EXTENDED_TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${extendedDirectory.absolutePath}/${trackService.EXTENDED_TRACKLIST}.") + } else { + // add track config to extendedTrackList.json + extendedTracksArray.add(trackConfigObject) + // unpack track data into organism directory + File archiveFile = new File(trackDataFile.getOriginalFilename()) + trackDataFile.transferTo(archiveFile) + try { + String urlTemplate = trackConfigObject.get(FeatureStringEnum.URL_TEMPLATE.value) + String trackDirectoryName = urlTemplate.split("/").first() + String path = extendedDirectory.absolutePath + File.separator + trackDirectoryName + fileService.decompress(archiveFile, path, trackConfigObject.get(FeatureStringEnum.LABEL.value), true) + + // write to trackList.json + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << extendedTrackListObject.toString(4) + trackListJsonWriter.close() + returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray + extendedTracksArray) + } + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) + } + } + } else { + if (trackFile) { + if (trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) == null) { + // add track config to trackList.json + File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) + if (!extendedTrackListJsonFile.exists()) { + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << "{'${FeatureStringEnum.TRACKS.value}':[]}" + trackListJsonWriter.close() + } else { + log.info "FILE EXISTS, so nothing to do ${extendedTrackListJsonFile.text}" + } + JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) + JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + if (trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) != null) { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") + } else { + try { + String path = extendedDirectory.absolutePath + File.separator + "raw" + TrackTypeEnum trackTypeEnum = org.bbop.apollo.gwt.shared.track.TrackTypeEnum.valueOf(trackConfigObject.apollo.type) + + // TODO: if the suffix is 0 does not end with gzip, then we need to run it through the decrompressor + String newFileName = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffix[0] : trackFile.originalFilename // File destinationFile // if( (trackTypeEnum == TrackTypeEnum.GFF3_JSON || trackTypeEnum == TrackTypeEnum.GFF3_JSON_CANVAS) && trackFile.originalFilename.endsWith(".gz")){ // File archiveFile = new File(trackFile.originalFilename) @@ -728,728 +725,741 @@ class OrganismController { // destinationFile = fileService.storeWithNewName(trackFile, path, trackConfigObject.key, newFileName) // } - File destinationFile = fileService.storeWithNewName(trackFile, path, trackConfigObject.key, newFileName) - if (trackFileIndex.getOriginalFilename()) { - String newFileNameIndex = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffixIndex[0] : trackFileIndex.originalFilename - fileService.storeWithNewName(trackFileIndex, path, trackConfigObject.key, newFileNameIndex) - } - - if (trackTypeEnum == TrackTypeEnum.GFF3_JSON || trackTypeEnum == TrackTypeEnum.GFF3_JSON_CANVAS) { - trackService.generateJSONForGff3(destinationFile, extendedDirectory.absolutePath, pathToJBrowseBinaries,trackConfigObject.apollo.topType) - } - - extendedTracksArray.add(trackConfigObject) - extendedTrackListObject.put(FeatureStringEnum.TRACKS.value, extendedTracksArray) - - // write to trackList.json - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << extendedTrackListObject.toString(4) - trackListJsonWriter.close() - returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) - } - catch (IOException e) { - log.error e.printStackTrace() - returnObject.put("error", e.message) - } - } - log.debug "trackJsonWriter: -> ${extendedTrackListJsonFile.absolutePath}, ${extendedTrackListJsonFile.text}" - } else { - log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" - returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") - } - } - } - } - } - } else { - log.error "Organism not found" - returnObject.put("error", "Organism not found.") - } + File destinationFile = fileService.storeWithNewName(trackFile, path, trackConfigObject.key, newFileName) + if (trackFileIndex.getOriginalFilename()) { + String newFileNameIndex = trackTypeEnum ? trackConfigObject.key + "." + trackTypeEnum.suffixIndex[0] : trackFileIndex.originalFilename + fileService.storeWithNewName(trackFileIndex, path, trackConfigObject.key, newFileNameIndex) + } - } catch (e) { - log.error e.message - returnObject.put("error", e.message) - } - - render returnObject as JSON - } + if (trackTypeEnum == TrackTypeEnum.GFF3_JSON || trackTypeEnum == TrackTypeEnum.GFF3_JSON_CANVAS) { + trackService.generateJSONForGff3(destinationFile, extendedDirectory.absolutePath, pathToJBrowseBinaries, trackConfigObject.apollo.topType) + } - @RestApiMethod(description = "Deletes a track from an existing organism and returns a JSON object of the deleted track's configuration", path = "/organism/deleteTrackFromOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - , @RestApiParam(name = "trackLabel", type = "string", paramType = RestApiParamType.QUERY, description = "Track label corresponding to the track that is to be deleted") - ]) - @Transactional - def deleteTrackFromOrganism() { - - JSONObject returnObject = new JSONObject() - - try { - JSONObject requestObject = permissionService.handleInput(request, params) - if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { - returnObject.put("error", "/deleteTrackFromOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + extendedTracksArray.add(trackConfigObject) + extendedTrackListObject.put(FeatureStringEnum.TRACKS.value, extendedTracksArray) - if (!requestObject.containsKey(FeatureStringEnum.TRACK_LABEL.value)) { - returnObject.put("error", "/deleteTrackFromOrganism requires '${FeatureStringEnum.TRACK_LABEL.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } - - String trackLabel = requestObject.get(FeatureStringEnum.TRACK_LABEL.value) - permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) - log.debug "user ${requestObject.get(FeatureStringEnum.USERNAME.value)} is admin" - Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) - - if (organism) { - log.debug "organism ${organism}" - File trackListJsonFile = new File(organism.trackList) - JSONObject trackListObject = JSON.parse(trackListJsonFile.text) as JSONObject - JSONObject trackObject = trackService.findTrackFromArray(trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value), trackLabel) - - if (trackObject == null) { - // track not found in trackList.json - log.debug "Track with label '${trackLabel}' not found; searching in extendedTrackList.json" - File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) - if (extendedTrackListJsonFile.exists()) { - JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) as JSONObject - trackObject = trackService.findTrackFromArray(extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value), trackLabel) - if (trackObject == null) { - // track not found - log.error "Track with label '${trackLabel}' not found" - returnObject.put("error", "Track with label '${trackLabel}' not found.") - } else { - log.debug "Track with label '${trackLabel}' found; removing from extendedTrackList.json" - extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value).remove(trackObject) - String urlTemplate = trackObject.get(FeatureStringEnum.URL_TEMPLATE.value) - String trackDirectory = urlTemplate.split("/").first() - File commonDirectory = trackService.getExtendedDataDirectory(organism) - File trackDir = new File(commonDirectory.absolutePath + File.separator + trackDirectory + File.separator + trackObject.get(FeatureStringEnum.LABEL.value)) - if (trackDir.exists()) { - log.debug "Deleting ${trackDir.getAbsolutePath()}" - if (trackDir.deleteDir()) { - // updating extendedTrackList.json - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << extendedTrackListObject.toString(4) - trackListJsonWriter.close() - } - } else { - log.error "track directory ${trackDir.getAbsolutePath()} not found" - returnObject.put("error", "Track with label '${trackLabel}' removed from config but track directory not found.") - // updating extendedTrackList.json - def trackListJsonWriter = extendedTrackListJsonFile.newWriter() - trackListJsonWriter << extendedTrackListObject.toString(4) - trackListJsonWriter.close() - } - returnObject.put("track", trackObject) - } - } else { - log.error "Track with label '${trackLabel}' not found" - returnObject.put("error", "Track with label '${trackLabel}' not found.") + // write to trackList.json + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << extendedTrackListObject.toString(4) + trackListJsonWriter.close() + returnObject.put(FeatureStringEnum.TRACKS.value, tracksArray) } - } else { - // track found in trackList.json - log.debug "track with label '${trackLabel}' found in trackList.json" - if (organism.dataAddedViaWebServices) { - log.debug "organism data was added via web services; thus can remove the track" - // track can be deleted since the organism and all subsequent tracks were added via web services - trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value).remove(trackObject) - String urlTemplate = trackObject.get(FeatureStringEnum.URL_TEMPLATE.value) - String trackDirectory = urlTemplate.split("/").first() - File trackDir = new File(organism.directory + File.separator + trackDirectory + File.separator + trackObject.get(FeatureStringEnum.LABEL.value)) - if (trackDir.exists()) { - log.debug "Deleting ${trackDir.getAbsolutePath()}" - if (trackDir.deleteDir()) { - // updating trackList.json - def trackListJsonWriter = trackListJsonFile.newWriter() - trackListJsonWriter << trackListObject.toString(4) - trackListJsonWriter.close() - } - } else { - log.error "track directory ${trackDir.getAbsolutePath()} not found" - returnObject.put("error", "Track with label '${trackLabel}' removed from config but track directory not found.") - // updating trackList.json - def trackListJsonWriter = trackListJsonFile.newWriter() - trackListJsonWriter << trackListObject.toString(4) - trackListJsonWriter.close() - } - returnObject.put("track", trackObject) - } else { - // cannot delete track since its part of the main data directory - log.error "Track with label '${trackLabel}' found but is part of the main data directory and cannot be deleted." - returnObject.put("error", "Track with label '${trackLabel}' found but is part of the main data directory and cannot be deleted.") + catch (IOException e) { + log.error e.printStackTrace() + returnObject.put("error", e.message) } + } + log.debug "trackJsonWriter: -> ${extendedTrackListJsonFile.absolutePath}, ${extendedTrackListJsonFile.text}" + } else { + log.error "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}" + returnObject.put("error", "an entry for track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' already exists in ${organism.directory}/${TRACKLIST}.") } - } else { - log.error("Organism not found") - returnObject.put("error", "Organism not found.") + } } - } catch (Exception e) { - log.error(e.message) - returnObject.put("error", e.message) + } } + } else { + log.error "Organism not found" + returnObject.put("error", "Organism not found.") + } + + } catch (e) { + log.error e.message + returnObject.put("error", e.message) + } + render returnObject as JSON + } + + @RestApiMethod(description = "Deletes a track from an existing organism and returns a JSON object of the deleted track's configuration", path = "/organism/deleteTrackFromOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + , @RestApiParam(name = "trackLabel", type = "string", paramType = RestApiParamType.QUERY, description = "Track label corresponding to the track that is to be deleted") + ]) + @Transactional + def deleteTrackFromOrganism() { + + JSONObject returnObject = new JSONObject() + + try { + JSONObject requestObject = permissionService.handleInput(request, params) + if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { + returnObject.put("error", "/deleteTrackFromOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) render returnObject as JSON - } + return + } - @RestApiMethod(description = "Update a track in an existing organism returning a JSON object containing old and new track configurations", path = "/organism/updateTrackForOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - , @RestApiParam(name = "trackConfig", type = "string", paramType = RestApiParamType.QUERY, description = "Track configuration (JBrowse JSON)") - ]) - @Transactional - def updateTrackForOrganism() { - - JSONObject returnObject = new JSONObject() - JSONObject requestObject = permissionService.handleInput(request, params) - - - if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { - returnObject.put("error", "/updateTrackForOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return + if (!requestObject.containsKey(FeatureStringEnum.TRACK_LABEL.value)) { + returnObject.put("error", "/deleteTrackFromOrganism requires '${FeatureStringEnum.TRACK_LABEL.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } + + String trackLabel = requestObject.get(FeatureStringEnum.TRACK_LABEL.value) + permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) + log.debug "user ${requestObject.get(FeatureStringEnum.USERNAME.value)} is admin" + Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) + + if (organism) { + log.debug "organism ${organism}" + File trackListJsonFile = new File(organism.trackList) + JSONObject trackListObject = JSON.parse(trackListJsonFile.text) as JSONObject + JSONObject trackObject = trackService.findTrackFromArray(trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value), trackLabel) + + if (trackObject == null) { + // track not found in trackList.json + log.debug "Track with label '${trackLabel}' not found; searching in extendedTrackList.json" + File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) + if (extendedTrackListJsonFile.exists()) { + JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) as JSONObject + trackObject = trackService.findTrackFromArray(extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value), trackLabel) + if (trackObject == null) { + // track not found + log.error "Track with label '${trackLabel}' not found" + returnObject.put("error", "Track with label '${trackLabel}' not found.") + } else { + log.debug "Track with label '${trackLabel}' found; removing from extendedTrackList.json" + extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value).remove(trackObject) + String urlTemplate = trackObject.get(FeatureStringEnum.URL_TEMPLATE.value) + String trackDirectory = urlTemplate.split("/").first() + File commonDirectory = trackService.getExtendedDataDirectory(organism) + File trackDir = new File(commonDirectory.absolutePath + File.separator + trackDirectory + File.separator + trackObject.get(FeatureStringEnum.LABEL.value)) + if (trackDir.exists()) { + log.debug "Deleting ${trackDir.getAbsolutePath()}" + if (trackDir.deleteDir()) { + // updating extendedTrackList.json + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << extendedTrackListObject.toString(4) + trackListJsonWriter.close() + } + } else { + log.error "track directory ${trackDir.getAbsolutePath()} not found" + returnObject.put("error", "Track with label '${trackLabel}' removed from config but track directory not found.") + // updating extendedTrackList.json + def trackListJsonWriter = extendedTrackListJsonFile.newWriter() + trackListJsonWriter << extendedTrackListObject.toString(4) + trackListJsonWriter.close() + } + returnObject.put("track", trackObject) + } + } else { + log.error "Track with label '${trackLabel}' not found" + returnObject.put("error", "Track with label '${trackLabel}' not found.") + } + } else { + // track found in trackList.json + log.debug "track with label '${trackLabel}' found in trackList.json" + if (organism.dataAddedViaWebServices) { + log.debug "organism data was added via web services; thus can remove the track" + // track can be deleted since the organism and all subsequent tracks were added via web services + trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value).remove(trackObject) + String urlTemplate = trackObject.get(FeatureStringEnum.URL_TEMPLATE.value) + String trackDirectory = urlTemplate.split("/").first() + File trackDir = new File(organism.directory + File.separator + trackDirectory + File.separator + trackObject.get(FeatureStringEnum.LABEL.value)) + if (trackDir.exists()) { + log.debug "Deleting ${trackDir.getAbsolutePath()}" + if (trackDir.deleteDir()) { + // updating trackList.json + def trackListJsonWriter = trackListJsonFile.newWriter() + trackListJsonWriter << trackListObject.toString(4) + trackListJsonWriter.close() + } + } else { + log.error "track directory ${trackDir.getAbsolutePath()} not found" + returnObject.put("error", "Track with label '${trackLabel}' removed from config but track directory not found.") + // updating trackList.json + def trackListJsonWriter = trackListJsonFile.newWriter() + trackListJsonWriter << trackListObject.toString(4) + trackListJsonWriter.close() + } + returnObject.put("track", trackObject) + } else { + // cannot delete track since its part of the main data directory + log.error "Track with label '${trackLabel}' found but is part of the main data directory and cannot be deleted." + returnObject.put("error", "Track with label '${trackLabel}' found but is part of the main data directory and cannot be deleted.") + } } + } else { + log.error("Organism not found") + returnObject.put("error", "Organism not found.") + } + } catch (Exception e) { + log.error(e.message) + returnObject.put("error", e.message) + } - if (!requestObject.containsKey(FeatureStringEnum.TRACK_CONFIG.value)) { - returnObject.put("error", "/updateTrackForOrganism requires '${FeatureStringEnum.TRACK_CONFIG.value}'.") - response.setStatus(HttpServletResponse.SC_BAD_REQUEST) - render returnObject as JSON - return - } + render returnObject as JSON + } - JSONObject trackConfigObject - try { - trackConfigObject = JSON.parse(params.get(FeatureStringEnum.TRACK_CONFIG.value)) as JSONObject - } catch (ConverterException ce) { - log.error ce.message - returnObject.put("error", ce.message) - render returnObject as JSON - return - } + @RestApiMethod(description = "Update a track in an existing organism returning a JSON object containing old and new track configurations", path = "/organism/updateTrackForOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + , @RestApiParam(name = "trackConfig", type = "string", paramType = RestApiParamType.QUERY, description = "Track configuration (JBrowse JSON)") + ]) + @Transactional + def updateTrackForOrganism() { - if (!trackConfigObject.containsKey(FeatureStringEnum.LABEL.value) || !trackConfigObject.containsKey(FeatureStringEnum.URL_TEMPLATE.value)) { - log.error "trackConfig requires both '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'." - returnObject.put("error", "trackConfig requires both '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'.") - render returnObject as JSON - return - } + JSONObject returnObject = new JSONObject() + JSONObject requestObject = permissionService.handleInput(request, params) - try { - permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) - log.debug "user ${requestObject.get(FeatureStringEnum.USERNAME.value)} is admin" - Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) - - if (organism) { - String organismDirectoryName = organism.directory - File organismDirectory = new File(organismDirectoryName) - File commonDataDirectory = new File(trackService.commonDataDirectory) - - if (organismDirectory.getParentFile().getAbsolutePath() == commonDataDirectory.getAbsolutePath()) { - // organism data is in common data directory - log.debug "organism data is in common data directory" - File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) - JSONObject trackListObject = JSON.parse(trackListJsonFile.text) - JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - // check if track exists in trackList.json - JSONObject trackObject = trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) - if (trackObject == null) { - log.error "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'" - returnObject.put("error", "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") - } else { - // replaces track config - tracksArray.remove(trackObject) - tracksArray.add(trackConfigObject) - - // write to trackList.json - def trackListJsonWriter = trackListJsonFile.newWriter() - trackListJsonWriter << trackListObject.toString(4) - trackListJsonWriter.close() - - returnObject.put("oldTrackConfig", trackObject) - returnObject.put("newTrackConfig", trackConfigObject) - } - } else { - // organism data is somewhere on the server where we don't want to modify anything - log.debug "organism data is somewhere on the FS" - File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) - JSONObject trackListObject = JSON.parse(trackListJsonFile.text) - JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - // check if track exists in trackList.json - JSONObject trackObject = trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) - if (trackObject != null) { - // cannot update track config - log.error "Track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' found but is part of the main data directory and cannot be updated." - returnObject.put("error", "Track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' found but is part of the main data directory and cannot be updated.") - } else { - File extendedDirectory = trackService.getExtendedDataDirectory(organism) - if (extendedDirectory.exists()) { - // extended organism directory present in common data directory - log.debug "extended organism directory ${extendedDirectory.absolutePath} present in common data directory" - File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) - JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) - JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) - // check if track exists in extendedTrackList.json - trackObject = trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) - if (trackObject == null) { - log.error "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'" - returnObject.put("error", "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") - } else { - // replaces track config - extendedTracksArray.remove(trackObject) - extendedTracksArray.add(trackConfigObject) - - // write to trackList.json - def extendedTrackListJsonWriter = extendedTrackListJsonFile.newWriter() - extendedTrackListJsonWriter << extendedTrackListObject.toString(4) - extendedTrackListJsonWriter.close() - - returnObject.put("oldTrackConfig", trackObject) - returnObject.put("newTrackConfig", trackConfigObject) - } - } else { - log.error "Extended organism directory does not exist; Cannot find track with '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'." - returnObject.put("error", "Cannot find track with '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") - } - } - } - } else { - log.error "Organism not found" - returnObject.put("error", "Organism not found.") - } - } catch (Exception e) { - log.error e.message - returnObject.put("error", e.message) - } - render returnObject as JSON + if (!requestObject.containsKey(FeatureStringEnum.ORGANISM.value)) { + returnObject.put("error", "/updateTrackForOrganism requires '${FeatureStringEnum.ORGANISM.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return } - @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/addOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "directory", type = "string", paramType = RestApiParamType.QUERY, description = "Filesystem path for the organisms data directory (required)") - , @RestApiParam(name = "commonName", type = "string", paramType = RestApiParamType.QUERY, description = "A name used for the organism") - , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Species name") - , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Species genus") - , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Filesystem path for a BLAT database (e.g. a .2bit file)") - , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "(optional) A flag for whether the organism appears as in the public genomes list (default false)") - , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Organism metadata") - , @RestApiParam(name = "returnAllOrganisms", type = "boolean", paramType = RestApiParamType.QUERY, description = "(optional) Return all organisms (true / false) (default true)") - ]) - @Transactional - def addOrganism() { - JSONObject organismJson = permissionService.handleInput(request, params) - String clientToken = organismJson.getString(FeatureStringEnum.CLIENT_TOKEN.value) - try { - // use permissionService.hasGlobalPermissions to check both authentication and authorization - if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.INSTRUCTOR)) { - def error = [error: 'not authorized to add organism'] - render error as JSON - log.error(error.error) - return - } + if (!requestObject.containsKey(FeatureStringEnum.TRACK_CONFIG.value)) { + returnObject.put("error", "/updateTrackForOrganism requires '${FeatureStringEnum.TRACK_CONFIG.value}'.") + response.setStatus(HttpServletResponse.SC_BAD_REQUEST) + render returnObject as JSON + return + } - if (organismJson.get("commonName") == "" || organismJson.get("directory") == "") { - throw new Exception('empty fields detected') - } + JSONObject trackConfigObject + try { + trackConfigObject = JSON.parse(params.get(FeatureStringEnum.TRACK_CONFIG.value)) as JSONObject + } catch (ConverterException ce) { + log.error ce.message + returnObject.put("error", ce.message) + render returnObject as JSON + return + } - log.debug "Adding ${organismJson.publicMode}" - Organism organism = new Organism( - commonName: organismJson.commonName - , directory: organismJson.directory - , blatdb: organismJson.blatdb - , species: organismJson.species - , genus: organismJson.genus - , obsolete: false - , metadata: organismJson.metadata ? organismJson.metadata.toString() : null - , nonDefaultTranslationTable: organismJson.nonDefaultTranslationTable ?: null - , publicMode: organismJson.publicMode ?: false - ) - log.debug "organism ${organism as JSON}" - // to support webservice, get current user from session or input object - def currentUser = permissionService.getCurrentUser(organismJson) - // allow specify the metadata creator through webservice, if not specified, take current user as the creator - if (!organism.getMetaData(FeatureStringEnum.CREATOR.value)) { - log.debug "creator does not exist, set current user as the creator" - organism.addMetaData(FeatureStringEnum.CREATOR.value, currentUser.id as String) - } + if (!trackConfigObject.containsKey(FeatureStringEnum.LABEL.value) || !trackConfigObject.containsKey(FeatureStringEnum.URL_TEMPLATE.value)) { + log.error "trackConfig requires both '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'." + returnObject.put("error", "trackConfig requires both '${FeatureStringEnum.LABEL.value}' and '${FeatureStringEnum.URL_TEMPLATE.value}'.") + render returnObject as JSON + return + } - if (checkOrganism(organism)) { - organism.save(failOnError: true, flush: true, insert: true) - } - def user = permissionService.currentUser - def userOrganismPermission = UserOrganismPermission.findByUserAndOrganism(user, organism) - if (!userOrganismPermission) { - log.debug "creating new permissions! " - userOrganismPermission = new UserOrganismPermission( - user: user - , organism: organism - , permissions: "[]" - ).save(insert: true) - log.debug "created new permissions! " + try { + permissionService.checkPermissions(requestObject, PermissionEnum.ADMINISTRATE) + log.debug "user ${requestObject.get(FeatureStringEnum.USERNAME.value)} is admin" + Organism organism = preferenceService.getOrganismForTokenInDB(requestObject.get(FeatureStringEnum.ORGANISM.value)) + + if (organism) { + String organismDirectoryName = organism.directory + File organismDirectory = new File(organismDirectoryName) + File commonDataDirectory = new File(trackService.commonDataDirectory) + + if (organismDirectory.getParentFile().getAbsolutePath() == commonDataDirectory.getAbsolutePath()) { + // organism data is in common data directory + log.debug "organism data is in common data directory" + File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) + JSONObject trackListObject = JSON.parse(trackListJsonFile.text) + JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + // check if track exists in trackList.json + JSONObject trackObject = trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) + if (trackObject == null) { + log.error "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'" + returnObject.put("error", "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") + } else { + // replaces track config + tracksArray.remove(trackObject) + tracksArray.add(trackConfigObject) + + // write to trackList.json + def trackListJsonWriter = trackListJsonFile.newWriter() + trackListJsonWriter << trackListObject.toString(4) + trackListJsonWriter.close() + + returnObject.put("oldTrackConfig", trackObject) + returnObject.put("newTrackConfig", trackConfigObject) + } + } else { + // organism data is somewhere on the server where we don't want to modify anything + log.debug "organism data is somewhere on the FS" + File trackListJsonFile = new File(organism.directory + File.separator + trackService.TRACKLIST) + JSONObject trackListObject = JSON.parse(trackListJsonFile.text) + JSONArray tracksArray = trackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + // check if track exists in trackList.json + JSONObject trackObject = trackService.findTrackFromArray(tracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) + if (trackObject != null) { + // cannot update track config + log.error "Track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' found but is part of the main data directory and cannot be updated." + returnObject.put("error", "Track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}' found but is part of the main data directory and cannot be updated.") + } else { + File extendedDirectory = trackService.getExtendedDataDirectory(organism) + if (extendedDirectory.exists()) { + // extended organism directory present in common data directory + log.debug "extended organism directory ${extendedDirectory.absolutePath} present in common data directory" + File extendedTrackListJsonFile = trackService.getExtendedTrackList(organism) + JSONObject extendedTrackListObject = JSON.parse(extendedTrackListJsonFile.text) + JSONArray extendedTracksArray = extendedTrackListObject.getJSONArray(FeatureStringEnum.TRACKS.value) + // check if track exists in extendedTrackList.json + trackObject = trackService.findTrackFromArray(extendedTracksArray, trackConfigObject.get(FeatureStringEnum.LABEL.value)) + if (trackObject == null) { + log.error "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'" + returnObject.put("error", "Cannot find track with label '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") + } else { + // replaces track config + extendedTracksArray.remove(trackObject) + extendedTracksArray.add(trackConfigObject) + + // write to trackList.json + def extendedTrackListJsonWriter = extendedTrackListJsonFile.newWriter() + extendedTrackListJsonWriter << extendedTrackListObject.toString(4) + extendedTrackListJsonWriter.close() + + returnObject.put("oldTrackConfig", trackObject) + returnObject.put("newTrackConfig", trackConfigObject) + } + } else { + log.error "Extended organism directory does not exist; Cannot find track with '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'." + returnObject.put("error", "Cannot find track with '${trackConfigObject.get(FeatureStringEnum.LABEL.value)}'.") } + } + } + } else { + log.error "Organism not found" + returnObject.put("error", "Organism not found.") + } + } catch (Exception e) { + log.error e.message + returnObject.put("error", e.message) + } - JSONArray permissionsArray = new JSONArray() - permissionsArray.add(PermissionEnum.ADMINISTRATE.name()) - userOrganismPermission.permissions = permissionsArray.toString() - userOrganismPermission.save(flush: true) - - // send file using: + render returnObject as JSON + } + + @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/addOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "directory", type = "string", paramType = RestApiParamType.QUERY, description = "Filesystem path for the organisms data directory (required)") + , @RestApiParam(name = "commonName", type = "string", paramType = RestApiParamType.QUERY, description = "A name used for the organism") + , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Species name") + , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Species genus") + , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Filesystem path for a BLAT database (e.g. a .2bit file)") + , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "(optional) A flag for whether the organism appears as in the public genomes list (default false)") + , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) Organism metadata") + , @RestApiParam(name = "returnAllOrganisms", type = "boolean", paramType = RestApiParamType.QUERY, description = "(optional) Return all organisms (true / false) (default true)") + ]) + @Transactional + def addOrganism() { + JSONObject organismJson = permissionService.handleInput(request, params) + String clientToken = organismJson.getString(FeatureStringEnum.CLIENT_TOKEN.value) + try { + // use permissionService.hasGlobalPermissions to check both authentication and authorization + if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.INSTRUCTOR)) { + def error = [error: 'not authorized to add organism'] + render error as JSON + log.error(error.error) + return + } + + if (organismJson.get("commonName") == "" || organismJson.get("directory") == "") { + throw new Exception('empty fields detected') + } + + log.debug "Adding ${organismJson.publicMode}" + Organism organism = new Organism( + commonName: organismJson.commonName + , directory: organismJson.directory + , blatdb: organismJson.blatdb + , species: organismJson.species + , genus: organismJson.genus + , obsolete: false + , metadata: organismJson.metadata ? organismJson.metadata.toString() : null + , nonDefaultTranslationTable: organismJson.nonDefaultTranslationTable ?: null + , publicMode: organismJson.publicMode ?: false + ) + log.debug "organism ${organism as JSON}" + // to support webservice, get current user from session or input object + def currentUser = permissionService.getCurrentUser(organismJson) + // allow specify the metadata creator through webservice, if not specified, take current user as the creator + if (!organism.getMetaData(FeatureStringEnum.CREATOR.value)) { + log.debug "creator does not exist, set current user as the creator" + organism.addMetaData(FeatureStringEnum.CREATOR.value, currentUser.id as String) + } + + if (checkOrganism(organism)) { + organism.save(failOnError: true, flush: true, insert: true) + } + def user = permissionService.currentUser + def userOrganismPermission = UserOrganismPermission.findByUserAndOrganism(user, organism) + if (!userOrganismPermission) { + log.debug "creating new permissions! " + userOrganismPermission = new UserOrganismPermission( + user: user + , organism: organism + , permissions: "[]" + ).save(insert: true) + log.debug "created new permissions! " + } + + JSONArray permissionsArray = new JSONArray() + permissionsArray.add(PermissionEnum.ADMINISTRATE.name()) + userOrganismPermission.permissions = permissionsArray.toString() + userOrganismPermission.save(flush: true) + + // send file using: // curl \ - // -F "userid=1" \ - // -F "filecomment=This is an image file" \ - // -F "sequenceData=@/home/user1/Desktop/jbrowse/sample/seq.zip" \ - // localhost:8080/apollo + // -F "userid=1" \ + // -F "filecomment=This is an image file" \ + // -F "sequenceData=@/home/user1/Desktop/jbrowse/sample/seq.zip" \ + // localhost:8080/apollo // if (request.getFile("sequenceData)")) { // // }W - sequenceService.loadRefSeqs(organism) + sequenceService.loadRefSeqs(organism) - preferenceService.setCurrentOrganism(permissionService.getCurrentUser(organismJson), organism, clientToken) - Boolean returnAllOrganisms = organismJson.returnAllOrganisms ? Boolean.valueOf(organismJson.returnAllOrganisms) : true + preferenceService.setCurrentOrganism(permissionService.getCurrentUser(organismJson), organism, clientToken) + Boolean returnAllOrganisms = organismJson.returnAllOrganisms ? Boolean.valueOf(organismJson.returnAllOrganisms) : true - render returnAllOrganisms ? findAllOrganisms() : new JSONArray() + render returnAllOrganisms ? findAllOrganisms() : new JSONArray() - } catch (e) { - def error = [error: 'problem saving organism: ' + e] - render error as JSON - e.printStackTrace() - log.error(error.error) - } + } catch (e) { + def error = [error: 'problem saving organism: ' + e] + render error as JSON + e.printStackTrace() + log.error(error.error) + } + } + + @RestApiMethod(description = "Finds sequences for a given organism and returns a JSON object including the username, organism and a JSONArray of sequences", path = "/organism/getSequencesForOrganism", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "Common name or ID for the organism") + ]) + def getSequencesForOrganism() { + JSONObject organismJson = permissionService.handleInput(request, params) + if (organismJson.username == "" || organismJson.organism == "" || organismJson.password == "") { + render(['error': 'Empty fields in request JSON'] as JSON) + return } - @RestApiMethod(description = "Finds sequences for a given organism and returns a JSON object including the username, organism and a JSONArray of sequences", path = "/organism/getSequencesForOrganism", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "Common name or ID for the organism") - ]) - def getSequencesForOrganism() { - JSONObject organismJson = permissionService.handleInput(request, params) - if (organismJson.username == "" || organismJson.organism == "" || organismJson.password == "") { - render(['error': 'Empty fields in request JSON'] as JSON) - return - } - - List sequenceList - - Organism organism = Organism.findByCommonName(organismJson.organism) - if (!organism) { - organism = Organism.findById(organismJson.organism) - } - if (!organism) { - def error = ['error': 'Organism not found ' + organismJson.organism] - render error as JSON - log.error(error.error) - return - } + List sequenceList + Organism organism = Organism.findByCommonName(organismJson.organism) + if (!organism) { + organism = Organism.findById(organismJson.organism) + } + if (!organism) { + def error = ['error': 'Organism not found ' + organismJson.organism] + render error as JSON + log.error(error.error) + return + } - if (permissionService.findHighestOrganismPermissionForUser(organism, permissionService.getCurrentUser(organismJson)).rank >= PermissionEnum.EXPORT.rank) { - def c = Sequence.createCriteria() - sequenceList = c.list { - eq('organism', organism) - } - log.debug "Sequence list fetched at getSequencesForOrganism: ${sequenceList}" - } else { - def error = ['error': 'Username ' + organismJson.username + ' does not have export permissions for organism ' + organismJson.organism] - render error as JSON - log.error(error.error) - return - } - render([username: organismJson.username, organism: organismJson.organism, sequences: sequenceList] as JSON) + if (permissionService.findHighestOrganismPermissionForUser(organism, permissionService.getCurrentUser(organismJson)).rank >= PermissionEnum.EXPORT.rank) { + def c = Sequence.createCriteria() + sequenceList = c.list { + eq('organism', organism) + } + log.debug "Sequence list fetched at getSequencesForOrganism: ${sequenceList}" + } else { + def error = ['error': 'Username ' + organismJson.username + ' does not have export permissions for organism ' + organismJson.organism] + render error as JSON + log.error(error.error) + return } - private boolean checkOrganism(Organism organism) { - File directory = new File(organism.directory) - File trackListFile = new File(organism.getTrackList()) - File refSeqFile = new File(organism.getRefseqFile()) - - if (!directory.exists() || !directory.isDirectory()) { - organism.valid = false - throw new Exception("Invalid directory specified: " + directory.absolutePath) - } else if (!trackListFile.exists()) { - organism.valid = false - throw new Exception("Track file does not exists: " + trackListFile.absolutePath) - } + render([username: organismJson.username, organism: organismJson.organism, sequences: sequenceList] as JSON) + } + private boolean checkOrganism(Organism organism) { + File directory = new File(organism.directory) + File trackListFile = new File(organism.getTrackList()) + File refSeqFile = new File(organism.getRefseqFile()) - if (organism.genomeFasta) { - File genomeFastaFile = new File(organism.genomeFastaFileName) - File genomeFastaIndexFile = new File(organism.genomeFastaIndexFileName) - if (!genomeFastaFile.exists()) { - organism.valid = false - throw new Exception("Invalid fasta file : " + genomeFastaFile.absolutePath) - } - if (!genomeFastaIndexFile.exists()) { - organism.valid = false - throw new Exception("Invalid index fasta file : " + genomeFastaIndexFile.absolutePath) - } - } else if (!refSeqFile.exists()) { - organism.valid = false - throw new Exception("Reference sequence file does not exists: " + refSeqFile.absolutePath) - } + if (!directory.exists() || !directory.isDirectory()) { + organism.valid = false + throw new Exception("Invalid directory specified: " + directory.absolutePath) + } else if (!trackListFile.exists()) { + organism.valid = false + throw new Exception("Track file does not exists: " + trackListFile.absolutePath) + } - organism.valid = true - return organism.valid + + if (organism.genomeFasta) { + File genomeFastaFile = new File(organism.genomeFastaFileName) + File genomeFastaIndexFile = new File(organism.genomeFastaIndexFileName) + if (!genomeFastaFile.exists()) { + organism.valid = false + throw new Exception("Invalid fasta file : " + genomeFastaFile.absolutePath) + } + if (!genomeFastaIndexFile.exists()) { + organism.valid = false + throw new Exception("Invalid index fasta file : " + genomeFastaIndexFile.absolutePath) + } + } else if (!refSeqFile.exists()) { + organism.valid = false + throw new Exception("Reference sequence file does not exists: " + refSeqFile.absolutePath) } + organism.valid = true + return organism.valid + } + + + @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/updateOrganismInfo", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "id", type = "long", paramType = RestApiParamType.QUERY, description = "unique id of organism to change") + , @RestApiParam(name = "directory", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for the organisms data directory (required)") + , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "species name") + , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "species genus") + , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for a BLAT database (e.g. a .2bit file)") + , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "a flag for whether the organism appears as in the public genomes list") + , @RestApiParam(name = "name", type = "string", paramType = RestApiParamType.QUERY, description = "a common name used for the organism") + , @RestApiParam(name = "nonDefaultTranslationTable", type = "string", paramType = RestApiParamType.QUERY, description = "non-default translation table") + , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") + , @RestApiParam(name = "organismData", type = "file", paramType = RestApiParamType.QUERY, description = "zip or tar.gz compressed data directory (if other options not used). Blat data should include a .2bit suffix and be in a directory 'searchDatabaseData'") + , @RestApiParam(name = "sequenceData", type = "file", paramType = RestApiParamType.QUERY, description = "FASTA file (optionally compressed) to automatically upload with") + , @RestApiParam(name = "searchDatabaseData", type = "file", paramType = RestApiParamType.QUERY, description = "2bit file for blat search (optional)") + ]) + @Transactional + def updateOrganismInfo() { + try { + JSONObject organismJson = permissionService.handleInput(request, params) + permissionService.checkPermissions(organismJson, PermissionEnum.ADMINISTRATE) + Organism organism = Organism.findById(organismJson.id) + Boolean madeObsolete + if (organism) { - @RestApiMethod(description = "Adds an organism returning a JSON array of all organisms", path = "/organism/updateOrganismInfo", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "id", type = "long", paramType = RestApiParamType.QUERY, description = "unique id of organism to change") - , @RestApiParam(name = "directory", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for the organisms data directory (required)") - , @RestApiParam(name = "species", type = "string", paramType = RestApiParamType.QUERY, description = "species name") - , @RestApiParam(name = "genus", type = "string", paramType = RestApiParamType.QUERY, description = "species genus") - , @RestApiParam(name = "blatdb", type = "string", paramType = RestApiParamType.QUERY, description = "filesystem path for a BLAT database (e.g. a .2bit file)") - , @RestApiParam(name = "publicMode", type = "boolean", paramType = RestApiParamType.QUERY, description = "a flag for whether the organism appears as in the public genomes list") - , @RestApiParam(name = "name", type = "string", paramType = RestApiParamType.QUERY, description = "a common name used for the organism") - , @RestApiParam(name = "nonDefaultTranslationTable", type = "string", paramType = RestApiParamType.QUERY, description = "non-default translation table") - , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") - ]) - @Transactional - def updateOrganismInfo() { - try { - JSONObject organismJson = permissionService.handleInput(request, params) - permissionService.checkPermissions(organismJson, PermissionEnum.ADMINISTRATE) - Organism organism = Organism.findById(organismJson.id) - Boolean madeObsolete - if (organism) { - log.debug "Updating organism info ${organismJson as JSON}" - organism.commonName = organismJson.name - organism.blatdb = organismJson.blatdb ?: null - organism.species = organismJson.species ?: null - organism.genus = organismJson.genus ?: null - //if the organismJson.metadata is null, remain the old metadata - organism.metadata = organismJson.metadata ? organismJson.metadata.toString() : organism.metadata - organism.directory = organismJson.directory - organism.publicMode = organismJson.publicMode ?: false - madeObsolete = !organism.obsolete && organismJson.obsolete - organism.obsolete = organismJson.obsolete ?: false - organism.nonDefaultTranslationTable = organismJson.nonDefaultTranslationTable ?: null - if (checkOrganism(organism)) { - if (madeObsolete) { - // TODO: remove all organism permissions - permissionService.removeAllPermissions(organism) - } - organism.save(flush: true, insert: false, failOnError: true) - } else { - throw new Exception("Bad organism directory: " + organism.directory) - } + CommonsMultipartFile organismDataFile = request.getFile(FeatureStringEnum.ORGANISM_DATA.value) + CommonsMultipartFile sequenceDataFile = request.getFile(FeatureStringEnum.SEQUENCE_DATA.value) + CommonsMultipartFile searchDatabaseDataFile = request.getFile(FeatureStringEnum.SEARCH_DATABASE_DATA.value) + if (organismDataFile ) { - if (organism.genomeFasta) { - // update location of genome fasta - sequenceService.updateGenomeFasta(organism) - } + } else { - } else { - throw new Exception('organism not found') + log.debug "Updating organism info ${organismJson as JSON}" + organism.commonName = organismJson.name + organism.blatdb = organismJson.blatdb ?: null + organism.species = organismJson.species ?: null + organism.genus = organismJson.genus ?: null + //if the organismJson.metadata is null, remain the old metadata + organism.metadata = organismJson.metadata ? organismJson.metadata.toString() : organism.metadata + organism.directory = organismJson.directory + organism.publicMode = organismJson.publicMode ?: false + madeObsolete = !organism.obsolete && organismJson.obsolete + organism.obsolete = organismJson.obsolete ?: false + organism.nonDefaultTranslationTable = organismJson.nonDefaultTranslationTable ?: null + if (checkOrganism(organism)) { + if (madeObsolete) { + // TODO: remove all organism permissions + permissionService.removeAllPermissions(organism) } - render findAllOrganisms() as JSON - } - catch (e) { - def error = [error: 'problem saving organism: ' + e] - render error as JSON - log.error(error.error) - } - } + organism.save(flush: true, insert: false, failOnError: true) + } else { + throw new Exception("Bad organism directory: " + organism.directory) + } - @RestApiMethod(description = "Update organism metadata", path = "/organism/updateOrganismMetadata", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "id", type = "long", paramType = RestApiParamType.QUERY, description = "unique id of organism to change") - , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") - ]) - @Transactional - def updateOrganismMetadata() { - log.debug "updating organism metadata ${params}" - try { - JSONObject organismJson = permissionService.handleInput(request, params) - permissionService.checkPermissions(organismJson, PermissionEnum.ADMINISTRATE) - Organism organism = Organism.findById(organismJson.id) - if (organism) { - log.debug "Updating organism metadata ${organismJson as JSON}" - organism.metadata = organismJson.metadata - organism.save(flush: true, insert: false, failOnError: true) - } else { - throw new Exception('Organism not found') - } - render new JSONObject() as JSON - } - catch (e) { - def error = [error: 'problem saving organism: ' + e] - render error as JSON - log.error(error.error) - } - } + if (organism.genomeFasta) { + // update location of genome fasta + sequenceService.updateGenomeFasta(organism) + } - @RestApiMethod(description = "Get creator metadata for organism, returns userId as String", path = "/organism/getOrganismCreator", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") - ]) - def getOrganismCreator() { - JSONObject organismJson = permissionService.handleInput(request, params) - if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.ADMIN)) { - def error = [error: 'not authorized to view the metadata'] - log.error(error.error) - render error as JSON - return - } - Organism organism = preferenceService.getOrganismForTokenInDB(organismJson.organism) - if (!organism) { - def error = [error: 'The organism does not exist'] - log.error(error.error) - render error as JSON - return } - JSONObject metaData = new JSONObject() - metaData.creator = organism.getMetaData(FeatureStringEnum.CREATOR.value) - render metaData as JSON + } else { + throw new Exception('organism not found') + } + render findAllOrganisms() as JSON } + catch (e) { + def error = [error: 'problem saving organism: ' + e] + render error as JSON + log.error(error.error) + } + } + + @RestApiMethod(description = "Update organism metadata", path = "/organism/updateOrganismMetadata", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "id", type = "long", paramType = RestApiParamType.QUERY, description = "unique id of organism to change") + , @RestApiParam(name = "metadata", type = "string", paramType = RestApiParamType.QUERY, description = "organism metadata") + ]) + @Transactional + def updateOrganismMetadata() { + log.debug "updating organism metadata ${params}" + try { + JSONObject organismJson = permissionService.handleInput(request, params) + permissionService.checkPermissions(organismJson, PermissionEnum.ADMINISTRATE) + Organism organism = Organism.findById(organismJson.id) + if (organism) { + log.debug "Updating organism metadata ${organismJson as JSON}" + organism.metadata = organismJson.metadata + organism.save(flush: true, insert: false, failOnError: true) + } else { + throw new Exception('Organism not found') + } + render new JSONObject() as JSON + } + catch (e) { + def error = [error: 'problem saving organism: ' + e] + render error as JSON + log.error(error.error) + } + } + + @RestApiMethod(description = "Get creator metadata for organism, returns userId as String", path = "/organism/getOrganismCreator", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "ID or commonName that can be used to uniquely identify an organism") + ]) + def getOrganismCreator() { + JSONObject organismJson = permissionService.handleInput(request, params) + if (!permissionService.hasGlobalPermissions(organismJson, GlobalPermissionEnum.ADMIN)) { + def error = [error: 'not authorized to view the metadata'] + log.error(error.error) + render error as JSON + return + } + Organism organism = preferenceService.getOrganismForTokenInDB(organismJson.organism) + if (!organism) { + def error = [error: 'The organism does not exist'] + log.error(error.error) + render error as JSON + return + } + JSONObject metaData = new JSONObject() + metaData.creator = organism.getMetaData(FeatureStringEnum.CREATOR.value) + render metaData as JSON + + } + + @RestApiMethod(description = "Returns a JSON array of all organisms, or optionally, gets information about a specific organism", path = "/organism/findAllOrganisms", verb = RestApiVerb.POST) + @RestApiParams(params = [ + @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) + , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) ID or commonName that can be used to uniquely identify an organism") + ]) + def findAllOrganisms() { + try { + JSONObject requestObject = permissionService.handleInput(request, params) + Boolean showPublicOnly = requestObject.showPublicOnly ? Boolean.valueOf(requestObject.showPublicOnly) : false + Boolean showObsolete = requestObject.showObsolete ? Boolean.valueOf(requestObject.showObsolete) : false + List organismList = [] + if (requestObject.organism) { + log.debug "finding info for specific organism" + Organism organism = Organism.findByCommonName(requestObject.organism) + if (!organism) organism = Organism.findById(requestObject.organism) + if (!organism) { + render([error: "Organism not found"] as JSON) + return + } + List permissionEnumList = permissionService.getOrganismPermissionsForUser(organism, permissionService.getCurrentUser(requestObject)) + if (permissionService.findHighestEnum(permissionEnumList)?.rank > PermissionEnum.NONE.rank) { + organismList.add(organism) + } + } else { + log.debug "finding all info" + //if (permissionService.isAdmin()) { + if (permissionService.hasGlobalPermissions(requestObject, GlobalPermissionEnum.ADMIN)) { + organismList = showObsolete ? Organism.all : Organism.findAllByObsolete(false) + } else { + organismList = permissionService.getOrganismsForCurrentUser(requestObject).filter() { o -> !o.obsolete } + } + } - @RestApiMethod(description = "Returns a JSON array of all organisms, or optionally, gets information about a specific organism", path = "/organism/findAllOrganisms", verb = RestApiVerb.POST) - @RestApiParams(params = [ - @RestApiParam(name = "username", type = "email", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "password", type = "password", paramType = RestApiParamType.QUERY) - , @RestApiParam(name = "organism", type = "string", paramType = RestApiParamType.QUERY, description = "(optional) ID or commonName that can be used to uniquely identify an organism") - ]) - def findAllOrganisms() { - try { - JSONObject requestObject = permissionService.handleInput(request, params) - Boolean showPublicOnly = requestObject.showPublicOnly ? Boolean.valueOf(requestObject.showPublicOnly) : false - Boolean showObsolete = requestObject.showObsolete ? Boolean.valueOf(requestObject.showObsolete) : false - List organismList = [] - if (requestObject.organism) { - log.debug "finding info for specific organism" - Organism organism = Organism.findByCommonName(requestObject.organism) - if (!organism) organism = Organism.findById(requestObject.organism) - if (!organism) { - render([error: "Organism not found"] as JSON) - return - } - List permissionEnumList = permissionService.getOrganismPermissionsForUser(organism, permissionService.getCurrentUser(requestObject)) - if (permissionService.findHighestEnum(permissionEnumList)?.rank > PermissionEnum.NONE.rank) { - organismList.add(organism) - } - } else { - log.debug "finding all info" - //if (permissionService.isAdmin()) { - if (permissionService.hasGlobalPermissions(requestObject, GlobalPermissionEnum.ADMIN)) { - organismList = showObsolete ? Organism.all : Organism.findAllByObsolete(false) - } else { - organismList = permissionService.getOrganismsForCurrentUser(requestObject).filter() { o -> !o.obsolete } - } - } - - if (!organismList) { - def error = [error: 'Not authorized for any organisms'] - render error as JSON - return - } + if (!organismList) { + def error = [error: 'Not authorized for any organisms'] + render error as JSON + return + } - UserOrganismPreference userOrganismPreference = UserOrganismPreference.findByUserAndCurrentOrganism(permissionService.getCurrentUser(requestObject), true, [max: 1, sort: "lastUpdated", order: "desc"]) - Long defaultOrganismId = userOrganismPreference ? userOrganismPreference.organism.id : null + UserOrganismPreference userOrganismPreference = UserOrganismPreference.findByUserAndCurrentOrganism(permissionService.getCurrentUser(requestObject), true, [max: 1, sort: "lastUpdated", order: "desc"]) + Long defaultOrganismId = userOrganismPreference ? userOrganismPreference.organism.id : null - JSONArray jsonArray = new JSONArray() - for (Organism organism in organismList) { + JSONArray jsonArray = new JSONArray() + for (Organism organism in organismList) { - def c = Feature.createCriteria() + def c = Feature.createCriteria() - def list = c.list { - featureLocations { - sequence { - eq('organism', organism) - } - } - 'in'('class', requestHandlingService.viewableAnnotationList) - } - log.debug "${list}" - Integer annotationCount = list.size() - Integer sequenceCount = Sequence.countByOrganism(organism) - - JSONObject jsonObject = [ - id : organism.id, - commonName : organism.commonName, - blatdb : organism.blatdb, - directory : organism.directory, - annotationCount : annotationCount, - sequences : sequenceCount, - genus : organism.genus, - species : organism.species, - valid : organism.valid, - publicMode : organism.publicMode, - obsolete : organism.obsolete, - nonDefaultTranslationTable: organism.nonDefaultTranslationTable, - metadata : organism.metadata, - currentOrganism : defaultOrganismId != null ? organism.id == defaultOrganismId : false - ] as JSONObject - jsonArray.add(jsonObject) + def list = c.list { + featureLocations { + sequence { + eq('organism', organism) } - render jsonArray as JSON - } - catch (Exception e) { - e.printStackTrace() - def error = [error: e.message] - render error as JSON + } + 'in'('class', requestHandlingService.viewableAnnotationList) } + log.debug "${list}" + Integer annotationCount = list.size() + Integer sequenceCount = Sequence.countByOrganism(organism) + + JSONObject jsonObject = [ + id : organism.id, + commonName : organism.commonName, + blatdb : organism.blatdb, + directory : organism.directory, + annotationCount : annotationCount, + sequences : sequenceCount, + genus : organism.genus, + species : organism.species, + valid : organism.valid, + publicMode : organism.publicMode, + obsolete : organism.obsolete, + nonDefaultTranslationTable: organism.nonDefaultTranslationTable, + metadata : organism.metadata, + currentOrganism : defaultOrganismId != null ? organism.id == defaultOrganismId : false + ] as JSONObject + jsonArray.add(jsonObject) + } + render jsonArray as JSON + } + catch (Exception e) { + e.printStackTrace() + def error = [error: e.message] + render error as JSON } + } /** * Permissions handled upstream * @return */ - def report() { - Map organismSummaryListInstance = new TreeMap<>(new Comparator() { - @Override - int compare(Organism o1, Organism o2) { - return o1.commonName <=> o2.commonName - } - }) - - // global version - OrganismSummary organismSummaryInstance = permissionService.currentUser.roles.first().rank == GlobalPermissionEnum.ADMIN.rank ? reportService.generateAllFeatureSummary() : new OrganismSummary() + def report() { + Map organismSummaryListInstance = new TreeMap<>(new Comparator() { + @Override + int compare(Organism o1, Organism o2) { + return o1.commonName <=> o2.commonName + } + }) + + // global version + OrganismSummary organismSummaryInstance = permissionService.currentUser.roles.first().rank == GlobalPermissionEnum.ADMIN.rank ? reportService.generateAllFeatureSummary() : new OrganismSummary() // OrganismSummary organismSummaryInstance = reportService.generateAllFeatureSummary() // def organismPermissions = permissionService.getOrganismsWithPermission(permissionService.currentUser) - def organisms = permissionService.getOrganismsWithMinimumPermission(permissionService.currentUser, PermissionEnum.ADMINISTRATE) + def organisms = permissionService.getOrganismsWithMinimumPermission(permissionService.currentUser, PermissionEnum.ADMINISTRATE) - organisms.each { organism -> - OrganismSummary thisOrganismSummaryInstance = reportService.generateOrganismSummary(organism) - organismSummaryListInstance.put(organism, thisOrganismSummaryInstance) - } + organisms.each { organism -> + OrganismSummary thisOrganismSummaryInstance = reportService.generateOrganismSummary(organism) + organismSummaryListInstance.put(organism, thisOrganismSummaryInstance) + } - respond organismSummaryInstance, model: [organismSummaries: organismSummaryListInstance, isSuperAdmin: permissionService.isAdmin()] - } + respond organismSummaryInstance, model: [organismSummaries: organismSummaryListInstance, isSuperAdmin: permissionService.isAdmin()] + } - protected void notFound() { - request.withFormat { - form multipartForm { - flash.message = message(code: 'default.not.found.message', args: [message(code: 'organism.label', default: 'Organism'), params.id]) - redirect action: "index", method: "GET" - } - '*' { render status: NOT_FOUND } - } + protected void notFound() { + request.withFormat { + form multipartForm { + flash.message = message(code: 'default.not.found.message', args: [message(code: 'organism.label', default: 'Organism'), params.id]) + redirect action: "index", method: "GET" + } + '*' { render status: NOT_FOUND } } + } } diff --git a/web-app/js/restapidoc/restapidoc.json b/web-app/js/restapidoc/restapidoc.json index 35ea8c93f0..cc909b60b3 100644 --- a/web-app/js/restapidoc/restapidoc.json +++ b/web-app/js/restapidoc/restapidoc.json @@ -2,14 +2,14 @@ "basePath": "Fill with basePath config", "apis": [ { - "jsondocId": "e1d03f71-8147-44ec-9525-89b4c567d20d", + "jsondocId": "62a3bf44-cfcb-43ec-986a-c6e888834707", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "83f32c5a-d543-4f1a-83b2-69898b2ed6a8", + "jsondocId": "e4d43d44-ca30-4b33-8f18-b4c6bacf2ab6", "name": "username", "format": "", "description": "", @@ -18,7 +18,7 @@ "allowedvalues": [] }, { - "jsondocId": "f91a4b47-20c5-4bdc-9d9d-2b6499e9d6a2", + "jsondocId": "e65b41d9-a917-4c88-a3d8-2022f8fa5165", "name": "password", "format": "", "description": "", @@ -27,7 +27,7 @@ "allowedvalues": [] }, { - "jsondocId": "5b53bf04-44f3-472e-945c-5916ee3ad46f", + "jsondocId": "05298534-de3b-4f37-a0e4-9af94a12419f", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -36,7 +36,7 @@ "allowedvalues": [] }, { - "jsondocId": "6cf4727d-8547-4bdc-a473-cbd3c3c2b291", + "jsondocId": "6f0aaca7-4340-4a86-88db-86950c5f4783", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -45,7 +45,7 @@ "allowedvalues": [] }, { - "jsondocId": "460d4b08-5569-4a89-b486-83fa6ddc94e6", + "jsondocId": "a9659237-255a-4153-aea2-454fa233492e", "name": "features", "format": "", "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','name':'gene01'}", @@ -57,9 +57,9 @@ "verb": "POST", "description": "Set name of a feature", "methodName": "setName", - "jsondocId": "259fc23e-47eb-464f-a04b-45d9ad6d3060", + "jsondocId": "6fae8d40-5385-4a2a-bd8a-58826f990464", "bodyobject": { - "jsondocId": "4fd216c0-42f3-4e10-bb04-eee968ca6027", + "jsondocId": "b965fc92-c5a1-4a8f-a524-35888d72590f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -69,7 +69,7 @@ "apierrors": [], "path": "/annotationEditor/setName", "response": { - "jsondocId": "df4488fd-03dc-4194-adb5-527bc15ff682", + "jsondocId": "770043bc-2031-4d8d-a281-c07233a86f82", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -82,7 +82,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "af0da809-8fd5-4b43-a224-dd0db53f8a90", + "jsondocId": "f39968bc-ccfa-4099-8977-b121ab40ed0f", "name": "username", "format": "", "description": "", @@ -91,7 +91,7 @@ "allowedvalues": [] }, { - "jsondocId": "7c7e775a-f335-41a9-b811-da958033eb39", + "jsondocId": "43350cff-cabd-4313-a371-b78fe5f5eee6", "name": "password", "format": "", "description": "", @@ -100,7 +100,7 @@ "allowedvalues": [] }, { - "jsondocId": "d3585696-d434-4e99-a9da-4fdeec81293a", + "jsondocId": "d8d90f84-ae66-416d-83be-60ba940ee1de", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -109,7 +109,7 @@ "allowedvalues": [] }, { - "jsondocId": "a8853b70-6351-4ffd-b019-33ade26854ba", + "jsondocId": "ae6ea05e-e217-4190-bc9e-722f499df157", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -118,21 +118,21 @@ "allowedvalues": [] }, { - "jsondocId": "a3222550-f642-487c-8676-dfc0571b19c9", + "jsondocId": "ac492402-3a51-49b7-bc14-5eecfe16abca", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects ('uniquename' required) JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','description':'some descriptive test'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Get comments", - "methodName": "getComments", - "jsondocId": "04cf76b4-3464-41f4-9f02-db5577ad36c7", + "description": "Set description for a feature", + "methodName": "setDescription", + "jsondocId": "7e63c02e-aa15-4e81-8883-47c890dcf2da", "bodyobject": { - "jsondocId": "a9c996de-22f1-4868-9c0d-8390ddbf7b84", + "jsondocId": "d6dffe3a-4136-4171-be04-48a49f89745b", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -140,9 +140,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getComments", + "path": "/annotationEditor/setDescription", "response": { - "jsondocId": "42d50045-3c2d-44d0-ab95-40217155cba1", + "jsondocId": "08175fd6-b588-4a55-90d6-f1e172d04b93", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -155,7 +155,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "319d7681-f09b-418e-bd2f-e323742eb6ed", + "jsondocId": "13d03e00-b13e-47c5-9c2f-335c51ce7aab", "name": "username", "format": "", "description": "", @@ -164,7 +164,7 @@ "allowedvalues": [] }, { - "jsondocId": "f4064b2a-a25b-4845-a456-6a67709f0cc1", + "jsondocId": "08505aea-9cfa-4b65-80a3-7159d995a59f", "name": "password", "format": "", "description": "", @@ -173,7 +173,7 @@ "allowedvalues": [] }, { - "jsondocId": "2a8cd67c-5bce-4330-809a-54fea1a36b10", + "jsondocId": "928c3819-339a-48f5-b94e-24eccead05bf", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -182,7 +182,7 @@ "allowedvalues": [] }, { - "jsondocId": "bb38bd06-6381-48f5-8f8a-1d6c2aff0759", + "jsondocId": "1cfda081-2375-4042-8931-cb845940f7dc", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -191,7 +191,7 @@ "allowedvalues": [] }, { - "jsondocId": "a1c22970-7367-4b8e-b442-12c50abb5dbb", + "jsondocId": "7b11d67a-91d0-4a6b-b97f-34490a719ba7", "name": "features", "format": "", "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','status':'existing-status-string'}. Available status found here: /availableStatus/ ", @@ -203,9 +203,9 @@ "verb": "POST", "description": "Set status of a feature", "methodName": "setStatus", - "jsondocId": "2a082930-6009-468d-a390-96ea3e566053", + "jsondocId": "0ef8452c-4ac9-4737-ab90-8e891a65c37c", "bodyobject": { - "jsondocId": "b314413e-505a-4dc6-87f2-45f380dbcb03", + "jsondocId": "f29a5b50-9eba-48a5-954a-9f0a1a1b5c45", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -215,34 +215,7 @@ "apierrors": [], "path": "/annotationEditor/setStatus", "response": { - "jsondocId": "5bad7ceb-1283-426c-a309-24183fb01d50", - "mapValueObject": "", - "mapKeyObject": "", - "object": "annotation editor" - }, - "produces": ["application/json"], - "consumes": ["application/json"] - }, - { - "headers": [], - "pathparameters": [], - "queryparameters": [], - "verb": "POST", - "description": "Returns a translation table as JSON", - "methodName": "getTranslationTable", - "jsondocId": "62cbae9d-b26b-41a3-84c4-2fd284ed880f", - "bodyobject": { - "jsondocId": "5d895925-10c3-4ec6-ae93-315c7ebdb089", - "mapValueObject": "", - "mapKeyObject": "", - "multiple": "Unknow", - "map": "", - "object": "annotation editor" - }, - "apierrors": [], - "path": "/annotationEditor/getTranslationTable", - "response": { - "jsondocId": "edda5fcb-263d-40d5-aee0-71deec00bc45", + "jsondocId": "cea91eaa-ad2b-4e05-b305-5425a95c2f8c", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -255,7 +228,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "1aedcb52-4824-42c2-b705-d4856542df44", + "jsondocId": "40a722e2-179d-4e5b-83ed-a8f0d36c5668", "name": "username", "format": "", "description": "", @@ -264,7 +237,7 @@ "allowedvalues": [] }, { - "jsondocId": "a49c5791-f421-4704-8281-1e98202a4294", + "jsondocId": "6f7ac24b-9031-4fbe-93dc-f85012fc1e0c", "name": "password", "format": "", "description": "", @@ -273,16 +246,7 @@ "allowedvalues": [] }, { - "jsondocId": "0a3fa8aa-0b33-4323-b267-5a5a1e7a2c19", - "name": "organism", - "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "1fbc5507-3500-4722-b750-4b9ff3c69a7a", + "jsondocId": "140bf152-cf1b-4045-9ad9-87cdac740a7e", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -291,39 +255,30 @@ "allowedvalues": [] }, { - "jsondocId": "8efd7435-26da-46dc-a161-d9000bb2b2aa", - "name": "suppressHistory", - "format": "", - "description": "Suppress the history of this operation", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "02c56db2-fd84-4a3c-a2a7-af332d198668", - "name": "suppressEvents", + "jsondocId": "e1a7d2e0-01fc-4523-b032-7f97aa408628", + "name": "organism", "format": "", - "description": "Suppress instant update of the user interface", - "type": "boolean", + "description": "(optional) Organism ID or common name", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "39482a53-5dab-4ebc-bd10-5b7c1188ce7a", + "jsondocId": "d815e334-3925-4877-9264-64a95f8f7ad6", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','non_reserved_properties':[{'tag':'clockwork','value':'orange'},{'tag':'color','value':'purple'}]}. Available status found here: /availableStatus/ ", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add non-coding genomic feature", - "methodName": "addFeature", - "jsondocId": "4451c6d8-cb55-4564-876e-3e804270b136", + "description": "Add attribute (key,value pair) to feature", + "methodName": "addAttribute", + "jsondocId": "0d2c31c8-1eb1-4b19-8c90-7b3459483e00", "bodyobject": { - "jsondocId": "e881515d-f42a-412b-848d-97ffe420d2ea", + "jsondocId": "3059cb0a-f56d-4ba8-b35e-bbd0e6f1163f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -331,9 +286,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addFeature", + "path": "/annotationEditor/addAttribute", "response": { - "jsondocId": "4937d53c-964e-48ca-830a-435c0ec92a29", + "jsondocId": "dae3c9aa-5afe-4fb7-a482-9c6b070c3e33", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -346,7 +301,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "d867322b-82e2-4e6e-aaf3-ec0f799cf186", + "jsondocId": "d364b0b1-430d-4e73-a1cf-4c66ead3b7c5", "name": "username", "format": "", "description": "", @@ -355,7 +310,7 @@ "allowedvalues": [] }, { - "jsondocId": "f0f435ed-9bb2-4a6d-9099-79e0db8c981e", + "jsondocId": "d0212bf5-3f6b-4988-a7e6-c188a93b9d66", "name": "password", "format": "", "description": "", @@ -364,16 +319,7 @@ "allowedvalues": [] }, { - "jsondocId": "9c053de1-a681-48f6-8603-34fd46787696", - "name": "organism", - "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "0a8bb6aa-1cda-464e-9385-8be2e76ef874", + "jsondocId": "b3beaf7d-6227-493b-aa46-93ee73a2d419", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -382,39 +328,30 @@ "allowedvalues": [] }, { - "jsondocId": "c5adece8-071f-4faa-abf3-91076103a578", - "name": "suppressHistory", - "format": "", - "description": "Suppress the history of this operation", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "0f4e8f7f-307e-4278-9892-fd49f8f82355", - "name": "suppressEvents", + "jsondocId": "1db2a4de-39c0-498d-a67b-fc97a7304954", + "name": "organism", "format": "", - "description": "Suppress instant update of the user interface", - "type": "boolean", + "description": "(optional) Organism ID or common name", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "3ec315e3-274f-4e3b-bb65-e5004b0e1b56", + "jsondocId": "60e6faa0-4892-47b2-9453-9b970abe4481", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray of JSON feature objects ('uniquename' required) JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add an exon", - "methodName": "addExon", - "jsondocId": "2f108dfc-ab05-418e-8388-0790dd515ba7", + "description": "Get comments", + "methodName": "getComments", + "jsondocId": "5a1c963f-7717-43b6-b0d6-e1b7f3ba7722", "bodyobject": { - "jsondocId": "df08d6b4-5dfe-4f2a-b7d3-a60e21176bf0", + "jsondocId": "097127dc-117f-4e71-a55d-973956455a4c", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -422,9 +359,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addExon", + "path": "/annotationEditor/getComments", "response": { - "jsondocId": "1ba11d56-3342-40a1-b347-928b9741fff6", + "jsondocId": "490b8d6c-6310-4489-9ce1-9927ac69d1a0", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -437,7 +374,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "57c2a791-f2c9-42df-8dd8-22d6aa0daf49", + "jsondocId": "007e6bb8-c88c-47eb-b390-377896bab22f", "name": "username", "format": "", "description": "", @@ -446,7 +383,7 @@ "allowedvalues": [] }, { - "jsondocId": "3185302e-aef7-41e9-a13a-bc52be109cb2", + "jsondocId": "62a8a3a3-5213-4a7c-9114-db4e86d39607", "name": "password", "format": "", "description": "", @@ -455,7 +392,7 @@ "allowedvalues": [] }, { - "jsondocId": "880b664d-557e-4240-9cc7-7d408663b4d6", + "jsondocId": "0d384068-e2a6-4ba1-aea7-4f2ef9b1755c", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -464,7 +401,7 @@ "allowedvalues": [] }, { - "jsondocId": "df50c1ed-071b-4791-b0d0-052ffd4398f9", + "jsondocId": "523b296b-6cec-4508-9da0-92763d58d111", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -473,21 +410,21 @@ "allowedvalues": [] }, { - "jsondocId": "e3b6f9c2-b966-402d-8e31-6fbb82c7dbdb", + "jsondocId": "028452f6-f42e-4ee8-b0fb-2b40da48a56d", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','symbol':'Pax6a'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add comments", - "methodName": "addComments", - "jsondocId": "34d97f80-d47e-4dee-9085-83cb86cef48c", + "description": "Set symbol of a feature", + "methodName": "setSymbol", + "jsondocId": "902eb77e-7216-44e3-9c52-7642fd31f1d2", "bodyobject": { - "jsondocId": "bc57bf34-7b17-4875-800b-847c43c75732", + "jsondocId": "55158c2b-4c6a-4388-b3d9-f95a682118b8", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -495,9 +432,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addComments", + "path": "/annotationEditor/setSymbol", "response": { - "jsondocId": "7cf9d744-6748-4b3d-9e88-7fcbb1efa786", + "jsondocId": "5b396893-1706-402f-959e-66aca46bb3d2", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -510,7 +447,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "7dc88f4b-fe26-4cb8-a75a-4cbb69e4d2e6", + "jsondocId": "01f5a487-3e48-438b-baa1-cf282e4866b5", "name": "username", "format": "", "description": "", @@ -519,7 +456,7 @@ "allowedvalues": [] }, { - "jsondocId": "18a0281f-3ca5-413c-a91b-5b08a2e38baa", + "jsondocId": "1dc82e42-04b2-40c3-a877-cad9c59972bf", "name": "password", "format": "", "description": "", @@ -528,7 +465,16 @@ "allowedvalues": [] }, { - "jsondocId": "bf9cbc5b-f040-4c6c-b239-74bf20ad50f2", + "jsondocId": "3c9c3292-8d84-4109-bd98-bfbc824d2b1f", + "name": "organism", + "format": "", + "description": "(optional) Organism ID or common name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "47cbaac5-0f94-4369-b3d6-7b3fa56108fa", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -537,30 +483,39 @@ "allowedvalues": [] }, { - "jsondocId": "9c434aa6-062e-45f9-b21d-60817c7295bc", - "name": "organism", + "jsondocId": "de0735f7-4698-4f9d-a9de-22fc2da9979f", + "name": "suppressHistory", "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", + "description": "Suppress the history of this operation", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "291e3b69-b784-42d4-9ff8-00b1449dcf28", + "name": "suppressEvents", + "format": "", + "description": "Suppress instant update of the user interface", + "type": "boolean", "required": "true", "allowedvalues": [] }, { - "jsondocId": "ec8158ac-7322-441b-b3e8-e120c6b0781e", + "jsondocId": "c0e293e7-bd06-4861-9b27-ec5d7f4ae85a", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete comments", - "methodName": "deleteComments", - "jsondocId": "327ced46-53ab-42eb-a3b0-de003b1af609", + "description": "Set exon feature boundaries", + "methodName": "setExonBoundaries", + "jsondocId": "4dc81407-0357-4cc4-aa3b-01033dddf9e2", "bodyobject": { - "jsondocId": "07b57005-a631-4226-8939-37789329f7c5", + "jsondocId": "14f10679-1066-4b93-a323-04a6bd43e831", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -568,9 +523,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteComments", + "path": "/annotationEditor/setExonBoundaries", "response": { - "jsondocId": "51f18756-e755-4bc6-98d1-2d317e8edcbb", + "jsondocId": "10f65691-6bbf-4637-8d4d-f041e5c4431b", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -581,59 +536,13 @@ { "headers": [], "pathparameters": [], - "queryparameters": [ - { - "jsondocId": "c3b002f4-f8fd-4841-a5fe-b66e30b3d1f7", - "name": "username", - "format": "", - "description": "", - "type": "email", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "060b1275-fb10-4738-a51c-538e36b41f29", - "name": "password", - "format": "", - "description": "", - "type": "password", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "9437a48e-c65d-4cb6-9e52-8c7bc58371f5", - "name": "sequence", - "format": "", - "description": "(optional) Sequence name", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "01922cdd-e626-4cb5-9a8f-7248aa3c21c8", - "name": "organism", - "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "c3d00223-e0c3-4fe5-ad8a-23318f9c6857", - "name": "features", - "format": "", - "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'old_comments','new_comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", - "type": "JSONArray", - "required": "true", - "allowedvalues": [] - } - ], + "queryparameters": [], "verb": "POST", - "description": "Update comments", - "methodName": "updateComments", - "jsondocId": "fdd780f1-ba0f-41b0-a2ac-2b0610940b68", + "description": "Returns a translation table as JSON", + "methodName": "getTranslationTable", + "jsondocId": "4aa965d6-be04-41cc-aebe-dda812b67f5e", "bodyobject": { - "jsondocId": "a7dcd9c7-c1a0-49a5-afb7-af93b0cf46dd", + "jsondocId": "37404ba2-24c3-474f-afd4-04c89976439a", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -641,9 +550,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/updateComments", + "path": "/annotationEditor/getTranslationTable", "response": { - "jsondocId": "e294ad74-b069-4c80-bc74-c83e385c7f32", + "jsondocId": "ba493a35-af3b-4a7a-940f-a45fc3529adf", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -656,7 +565,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "247dca98-cee0-4288-a335-7742cfd44e75", + "jsondocId": "4c767b7f-bd48-4e3c-a32f-3b1f6981079e", "name": "username", "format": "", "description": "", @@ -665,7 +574,7 @@ "allowedvalues": [] }, { - "jsondocId": "f4db77a0-4993-4787-94c3-24c91bf9d93d", + "jsondocId": "669a77fa-ab3a-4d74-ab2e-328a9e25259a", "name": "password", "format": "", "description": "", @@ -674,25 +583,25 @@ "allowedvalues": [] }, { - "jsondocId": "b034fa77-2509-4873-8fee-f72eb8296ff4", - "name": "sequence", + "jsondocId": "f2447e87-48fb-4f75-a2ce-c85a29a83832", + "name": "organism", "format": "", - "description": "(optional) Sequence name", + "description": "(optional) Organism ID or common name", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "8e4b62fa-2351-4445-b357-4477939dbbde", - "name": "organism", + "jsondocId": "a7682060-a872-44a5-a528-f05d6da434e7", + "name": "sequence", "format": "", - "description": "(optional) Organism ID or common name", + "description": "(optional) Sequence name", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "952d4f22-fc90-4f65-8893-064f60495a10", + "jsondocId": "d9bb6d7a-081a-4d4d-b857-a9f2b9206f04", "name": "suppressHistory", "format": "", "description": "Suppress the history of this operation", @@ -701,7 +610,7 @@ "allowedvalues": [] }, { - "jsondocId": "5b0516c0-fcf2-47af-a422-54c06d5cf091", + "jsondocId": "56054126-8d34-43ee-b28d-7857f7c96656", "name": "suppressEvents", "format": "", "description": "Suppress instant update of the user interface", @@ -710,7 +619,7 @@ "allowedvalues": [] }, { - "jsondocId": "6ead525c-4d18-45eb-a158-e8186c1f0ba0", + "jsondocId": "2ee29562-ba1a-4a44-95ce-f7cd23e4ec45", "name": "features", "format": "", "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", @@ -720,11 +629,11 @@ } ], "verb": "POST", - "description": "Add transcript", - "methodName": "addTranscript", - "jsondocId": "60d6f6fb-43fb-4ca7-8eae-0038c48b40cd", + "description": "Add non-coding genomic feature", + "methodName": "addFeature", + "jsondocId": "1d6b687b-6326-4d0d-a1a8-6522ea3d38d2", "bodyobject": { - "jsondocId": "53d69dbe-e544-42f6-8029-37a3af25379c", + "jsondocId": "cfa14e67-6fca-4879-bbf8-a05748282bb3", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -732,9 +641,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addTranscript", + "path": "/annotationEditor/addFeature", "response": { - "jsondocId": "a21772ce-7959-4452-b866-cbc724639e62", + "jsondocId": "89897479-6904-46ac-a654-c2ab7dfaf87d", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -747,7 +656,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "6d5589dc-d995-402f-8395-c54f3c90ceae", + "jsondocId": "32126aaf-1cd7-480d-8e47-f03acbc13af2", "name": "username", "format": "", "description": "", @@ -756,7 +665,7 @@ "allowedvalues": [] }, { - "jsondocId": "c5817cd3-9b6e-4e76-a3e2-27bf15904587", + "jsondocId": "3af6a235-3836-4483-a916-8669e9c535d9", "name": "password", "format": "", "description": "", @@ -765,25 +674,25 @@ "allowedvalues": [] }, { - "jsondocId": "96690f3b-479c-482e-b48c-a707a10adf2a", - "name": "sequence", + "jsondocId": "2a1a4ebf-42ee-4184-842d-057c067e6145", + "name": "organism", "format": "", - "description": "(optional) Sequence name", + "description": "(optional) Organism ID or common name", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "28b4595a-4bb0-4ee2-83c8-2be6cf3c2eba", - "name": "organism", + "jsondocId": "4b08ab94-4597-418a-8160-ad12b0d6d831", + "name": "sequence", "format": "", - "description": "(optional) Organism ID or common name", + "description": "(optional) Sequence name", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "c858d7ec-2b11-4d51-8115-51a708c3fc52", + "jsondocId": "daa869c5-1eca-4b0a-8c63-502ccd37e288", "name": "suppressHistory", "format": "", "description": "Suppress the history of this operation", @@ -792,7 +701,7 @@ "allowedvalues": [] }, { - "jsondocId": "82cd7e65-c97d-4091-86a0-0246eb16ebdf", + "jsondocId": "57c16f6e-cbe7-4f70-a7a5-44b8d8b47be3", "name": "suppressEvents", "format": "", "description": "Suppress instant update of the user interface", @@ -801,21 +710,21 @@ "allowedvalues": [] }, { - "jsondocId": "a1b0ba8d-0712-44d1-9f53-915db7f568dd", + "jsondocId": "a511bfcb-2856-47bd-a53b-cf26beadbdb1", "name": "features", "format": "", - "description": "JSONArray containing a single JSONObject feature that contains 'uniquename'", + "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Duplicate transcript", - "methodName": "duplicateTranscript", - "jsondocId": "b5df289d-e851-4415-8541-fc539cc7abc0", + "description": "Add an exon", + "methodName": "addExon", + "jsondocId": "f92fa43a-3902-48a1-9448-232a03248fde", "bodyobject": { - "jsondocId": "f9ef95a7-881e-4fe0-9caf-9cebda4168be", + "jsondocId": "a4e570e2-fd04-4756-b768-a300530ab8ef", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -823,9 +732,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/duplicateTranscript", + "path": "/annotationEditor/addExon", "response": { - "jsondocId": "993587c3-8ead-467c-ac65-c7d115c93f68", + "jsondocId": "b9c52e10-c7c4-4602-bc4b-b1a1774a0f26", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -838,7 +747,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "1f999e24-c567-4484-a2f1-eebd1b6f6376", + "jsondocId": "5b23e52d-0323-471b-9d08-f874e5df20e6", "name": "username", "format": "", "description": "", @@ -847,7 +756,7 @@ "allowedvalues": [] }, { - "jsondocId": "6fc34950-3865-45c5-b0f3-10a31134f97e", + "jsondocId": "bf11537a-1f60-40ad-aac3-3dcc30b3422b", "name": "password", "format": "", "description": "", @@ -856,7 +765,7 @@ "allowedvalues": [] }, { - "jsondocId": "8fd08912-7dfa-4d06-8dc1-2bf0b4b5b927", + "jsondocId": "92529366-ae8f-4ce0-a332-46c6841af2a2", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -865,7 +774,7 @@ "allowedvalues": [] }, { - "jsondocId": "835379b9-942e-4b04-adce-57fd018d47ad", + "jsondocId": "36f63dac-a542-4a63-9ed0-f11499c015ff", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -874,21 +783,21 @@ "allowedvalues": [] }, { - "jsondocId": "33a5b093-d6e9-47ff-a9d0-eac820a6a4f7", + "jsondocId": "c5984484-e58f-4d7c-b272-f682f1ffe28f", "name": "features", "format": "", - "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmin':12}}", + "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set translation start", - "methodName": "setTranslationStart", - "jsondocId": "c9dc2a8a-9bc1-4739-9274-3c452a0805b8", + "description": "Add comments", + "methodName": "addComments", + "jsondocId": "86f95a65-6e60-4bc7-a2e9-78c63b63c766", "bodyobject": { - "jsondocId": "73538bda-f956-487a-bee1-842682889b0b", + "jsondocId": "9b2eebbb-07e8-44b1-a5c7-ef1b5cd98281", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -896,9 +805,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setTranslationStart", + "path": "/annotationEditor/addComments", "response": { - "jsondocId": "0f23f026-d266-4837-aae8-cdcd8f33e669", + "jsondocId": "5fea65e6-5059-4c24-a8c2-c23491f4ce4c", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -911,7 +820,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "d2ce5f18-5351-4e34-847b-d1bbb5ab0e44", + "jsondocId": "28ff8210-383a-4802-80aa-55cf6ae72fc7", "name": "username", "format": "", "description": "", @@ -920,7 +829,7 @@ "allowedvalues": [] }, { - "jsondocId": "835f989e-4d30-4964-830d-74bf3d467218", + "jsondocId": "82aaa435-a1e1-40ca-9fbf-3d3e653a5117", "name": "password", "format": "", "description": "", @@ -929,7 +838,7 @@ "allowedvalues": [] }, { - "jsondocId": "8aa8806f-4430-4587-aa01-119cdd6ba72e", + "jsondocId": "19da8e2b-bb03-404f-9059-71c5503c5d5d", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -938,7 +847,7 @@ "allowedvalues": [] }, { - "jsondocId": "b7168a04-da5d-49ec-b4bf-3b2919b739c0", + "jsondocId": "d9dd9d1c-444d-47c7-99a6-5f59db4e9354", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -947,21 +856,21 @@ "allowedvalues": [] }, { - "jsondocId": "1109c9fa-fae6-4c99-94b9-8c3e386cda44", + "jsondocId": "8a4d0311-d93f-47c1-9a6f-d219af350fb4", "name": "features", "format": "", - "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmax':12}}", + "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set translation end", - "methodName": "setTranslationEnd", - "jsondocId": "e3dba6a3-d7e4-403e-9715-cf3419bede96", + "description": "Delete comments", + "methodName": "deleteComments", + "jsondocId": "8a1a0566-2c82-493a-b76a-ead7f61cfb49", "bodyobject": { - "jsondocId": "8c3d990a-7aa7-46e1-be5d-688672ae544b", + "jsondocId": "70cc28f7-9e23-4619-b8f4-c1ab60bbba2f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -969,9 +878,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setTranslationEnd", + "path": "/annotationEditor/deleteComments", "response": { - "jsondocId": "6a2d8459-1852-4235-9272-91e3cc6e151d", + "jsondocId": "8eeacc1c-b44e-41f4-9cce-998a7298349b", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -984,7 +893,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "36705f1b-84b5-4299-94f6-055c7cbfd5ea", + "jsondocId": "e410c7d6-e29b-474c-bb24-b5be9af039be", "name": "username", "format": "", "description": "", @@ -993,7 +902,7 @@ "allowedvalues": [] }, { - "jsondocId": "ae3433fd-a739-43c0-a455-415daae212af", + "jsondocId": "e5ee10c1-3435-40ff-91e1-d3ef3248c7a2", "name": "password", "format": "", "description": "", @@ -1002,7 +911,7 @@ "allowedvalues": [] }, { - "jsondocId": "fb4272f9-4d74-4d68-a676-2a4cde5eff69", + "jsondocId": "b356765b-74ab-4581-9502-714b3bc61c1d", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1011,7 +920,7 @@ "allowedvalues": [] }, { - "jsondocId": "beb2d7a6-1da6-411e-a821-997157698864", + "jsondocId": "d86be330-5bd8-4c89-a8e7-bab8f9d66278", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1020,21 +929,21 @@ "allowedvalues": [] }, { - "jsondocId": "0c2f0c1b-dcc8-4f9f-9bae-7acdad456020", + "jsondocId": "988a275c-9dd4-4e92-aba0-09b9ce06e35c", "name": "features", "format": "", - "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234'}", + "description": "JSONArray of JSON feature objects ('uniquename' required) that include an added 'old_comments','new_comments' JSONArray described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set longest ORF", - "methodName": "setLongestOrf", - "jsondocId": "e9a4a9ce-9f81-4ce7-bb94-49c4e2642b4e", + "description": "Update comments", + "methodName": "updateComments", + "jsondocId": "76556a2c-a1b3-41a8-8cc7-65dfd28ee85d", "bodyobject": { - "jsondocId": "65e5acd5-75d1-4ed5-8659-da6127daaa34", + "jsondocId": "d3511220-b0ec-4400-a2ce-88165fd8dea4", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1042,9 +951,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setLongestOrf", + "path": "/annotationEditor/updateComments", "response": { - "jsondocId": "d9507a18-5005-4b71-8ccd-07e06c5ab8dd", + "jsondocId": "5d12abef-9c21-4541-a441-fba12fa269ec", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1057,7 +966,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "7f5a2465-c909-40b3-978a-888cd12d2e6d", + "jsondocId": "1fb9f8bd-deff-4673-8fb7-7ab772042759", "name": "username", "format": "", "description": "", @@ -1066,7 +975,7 @@ "allowedvalues": [] }, { - "jsondocId": "7e9df84b-8e43-4f03-9c75-46579781b023", + "jsondocId": "4b4e25cb-a064-4d69-8d5f-aee2c3d3f41d", "name": "password", "format": "", "description": "", @@ -1075,7 +984,7 @@ "allowedvalues": [] }, { - "jsondocId": "33fe65aa-6c78-41c9-8c76-cf76946e6650", + "jsondocId": "a50ca9a6-8ee6-4d1e-a8db-fc6ffa03d5be", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1084,7 +993,7 @@ "allowedvalues": [] }, { - "jsondocId": "e548a081-9c86-4078-aa7d-2ffef1674a91", + "jsondocId": "7a11914c-0117-4845-83ba-169570091c3a", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1093,21 +1002,39 @@ "allowedvalues": [] }, { - "jsondocId": "97760c93-0174-4e86-be35-52176dc36bb9", + "jsondocId": "9f1a6c9e-9864-40aa-85c4-bff88d53955f", + "name": "suppressHistory", + "format": "", + "description": "Suppress the history of this operation", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "c6728681-3cac-46bc-b805-68b50363a34f", + "name": "suppressEvents", + "format": "", + "description": "Suppress instant update of the user interface", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "17ba2edd-5c77-4b0e-9539-d902f588d829", "name": "features", "format": "", - "description": "JSONArray containing feature objects with the location object defined {'uniquename':'ABCD-1234','location':{'fmin':2,'fmax':12}}", + "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set boundaries of genomic feature", - "methodName": "setBoundaries", - "jsondocId": "748e7b30-d95b-4075-a497-e24c005f13c3", + "description": "Add transcript", + "methodName": "addTranscript", + "jsondocId": "e68cf7d4-a97a-498d-bd4a-d7e00d83d78e", "bodyobject": { - "jsondocId": "3d4b5528-c4e3-479a-ba10-7e29646ca7cb", + "jsondocId": "cd389585-eb81-4ca8-b6f9-e872721ee6d5", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1115,9 +1042,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setBoundaries", + "path": "/annotationEditor/addTranscript", "response": { - "jsondocId": "53b58dc6-53a1-4646-9422-268688a2b23b", + "jsondocId": "db8d5ed1-84c4-4983-898f-a1a8b38ee180", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1130,7 +1057,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "900c8996-72ff-4254-b3de-89369a7d2cbf", + "jsondocId": "7ea24636-f88e-4270-bbe6-58e25a601aa1", "name": "username", "format": "", "description": "", @@ -1139,7 +1066,7 @@ "allowedvalues": [] }, { - "jsondocId": "f44e23be-cef3-47ea-8c2d-8c2a8a895183", + "jsondocId": "687de789-2977-4303-9385-a2fbeb631d52", "name": "password", "format": "", "description": "", @@ -1148,7 +1075,7 @@ "allowedvalues": [] }, { - "jsondocId": "273c137c-93da-4717-8803-08a4925e6941", + "jsondocId": "41d507cf-6d47-4bee-9cb0-396f0bc10e9b", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1157,21 +1084,48 @@ "allowedvalues": [] }, { - "jsondocId": "844cceb7-08e6-45f6-90c9-caba91e9c37e", + "jsondocId": "55ea33a8-b2d6-45b9-87dc-2122a661e312", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", "type": "string", "required": "true", "allowedvalues": [] + }, + { + "jsondocId": "44167f26-f2fa-45aa-b025-389a1c7c578a", + "name": "suppressHistory", + "format": "", + "description": "Suppress the history of this operation", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "9fcafe33-bf53-476f-9a3c-42e5f5fc57b7", + "name": "suppressEvents", + "format": "", + "description": "Suppress instant update of the user interface", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "fd285755-1860-4a12-b350-4a0d30e56d07", + "name": "features", + "format": "", + "description": "JSONArray containing a single JSONObject feature that contains 'uniquename'", + "type": "JSONArray", + "required": "true", + "allowedvalues": [] } ], "verb": "POST", - "description": "Get all annotated features for a sequence", - "methodName": "getFeatures", - "jsondocId": "54d2dd57-25a2-4434-87a1-2a71b763cd43", + "description": "Duplicate transcript", + "methodName": "duplicateTranscript", + "jsondocId": "8304fe06-2fa9-4b1d-84e6-b34e2dcaf7e5", "bodyobject": { - "jsondocId": "f69fce9d-68dd-4876-982f-30316a163b69", + "jsondocId": "05ce7a5a-b238-4e41-8f1e-a6bbd92ab3eb", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1179,9 +1133,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getFeatures", + "path": "/annotationEditor/duplicateTranscript", "response": { - "jsondocId": "1e334859-9d39-460b-93b6-44355fbcafb3", + "jsondocId": "d4820690-9b14-40b7-8f64-f2864c7fb483", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1194,7 +1148,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "57c64387-af94-4694-b053-eaf755d86bd5", + "jsondocId": "3e91c18c-6fe5-4260-9336-47afd02883bb", "name": "username", "format": "", "description": "", @@ -1203,7 +1157,7 @@ "allowedvalues": [] }, { - "jsondocId": "7d78c813-261f-4d50-9f6b-e5e83271601f", + "jsondocId": "8f831671-05ec-487d-8653-158163f9704f", "name": "password", "format": "", "description": "", @@ -1212,7 +1166,7 @@ "allowedvalues": [] }, { - "jsondocId": "6706164e-4f5d-4964-8cc5-ac7da98f34fd", + "jsondocId": "6a3c6187-f850-467c-92e3-8cc582000f02", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1221,21 +1175,30 @@ "allowedvalues": [] }, { - "jsondocId": "4a9c7133-33aa-4b18-8b3d-af2ab571f507", - "name": "organism", + "jsondocId": "990f6d17-24e8-4fe2-8dad-b09527fac468", + "name": "organism", + "format": "", + "description": "(optional) Organism ID or common name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "98dfbacf-fca1-4907-bc54-13a8cfd53fc1", + "name": "features", "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", + "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmin':12}}", + "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Get sequence alterations for a given sequence", - "methodName": "getSequenceAlterations", - "jsondocId": "29d7d8b8-f1ab-40ec-b3e5-349743df0ed8", + "description": "Set translation start", + "methodName": "setTranslationStart", + "jsondocId": "951488b2-27b4-4733-bb4a-8328b176b637", "bodyobject": { - "jsondocId": "8095cad3-162f-424a-a914-b7cdcbc7ea7b", + "jsondocId": "575b5b77-37da-443e-b850-569b12f1532f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1243,9 +1206,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getSequenceAlterations", + "path": "/annotationEditor/setTranslationStart", "response": { - "jsondocId": "ac2407ef-ba7a-40c5-8a76-b3d24fe76678", + "jsondocId": "5821fcfc-440b-4cfe-b6ba-58dd523672c8", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1258,7 +1221,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "5d2a0ff1-b9b1-451a-879e-6252d1aa4644", + "jsondocId": "a74d2a80-2c2d-4eca-ac66-c32972bedeaa", "name": "username", "format": "", "description": "", @@ -1267,7 +1230,7 @@ "allowedvalues": [] }, { - "jsondocId": "ed463a0a-d09a-4545-8632-67489273b007", + "jsondocId": "908a8a39-4b10-42d6-9db2-4035026bfd25", "name": "password", "format": "", "description": "", @@ -1276,7 +1239,7 @@ "allowedvalues": [] }, { - "jsondocId": "97271d72-57b2-4482-82b4-d654daeb93c5", + "jsondocId": "ab20dfb9-6dd4-4daa-972a-1487a0c282f6", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1285,7 +1248,7 @@ "allowedvalues": [] }, { - "jsondocId": "b4c8b88f-cf71-4dbe-a025-4aca129ca92e", + "jsondocId": "b6ec8a09-c8c3-43cb-8143-86a941be4590", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1294,21 +1257,21 @@ "allowedvalues": [] }, { - "jsondocId": "3598f31e-9476-4f53-98a6-422e2b133ec4", + "jsondocId": "8a15945c-70ab-4cf8-ab33-cbf476942633", "name": "features", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','non_reserved_properties':[{'tag':'clockwork','value':'orange'},{'tag':'color','value':'purple'}]}. Available status found here: /availableStatus/ ", + "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmax':12}}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete attribute (key,value pair) for feature", - "methodName": "deleteAttribute", - "jsondocId": "b3c1d41b-be3c-466d-949d-11a3aaf7cf7c", + "description": "Set translation end", + "methodName": "setTranslationEnd", + "jsondocId": "6e2dc7e5-4b56-46ce-b67e-784179e0aee7", "bodyobject": { - "jsondocId": "35858e56-78f7-4dbb-9631-ebcc2c9cc7ed", + "jsondocId": "eadc0170-0250-4635-98e8-2390f29febbf", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1316,9 +1279,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteAttribute", + "path": "/annotationEditor/setTranslationEnd", "response": { - "jsondocId": "e401e2c0-8cbc-4e75-82ab-c25c876936d7", + "jsondocId": "d6faa442-8f21-4a0e-ac34-29c07bec70ce", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1331,7 +1294,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "4f37911d-d07a-448f-b808-5439424a83a1", + "jsondocId": "dfe4b040-bf12-4e0d-b7b9-b20a88d52a32", "name": "username", "format": "", "description": "", @@ -1340,7 +1303,7 @@ "allowedvalues": [] }, { - "jsondocId": "2d764b1e-d636-4336-854c-a5bdcd4076f2", + "jsondocId": "8814a657-1fd3-4749-b6ca-bb75775c5498", "name": "password", "format": "", "description": "", @@ -1349,7 +1312,7 @@ "allowedvalues": [] }, { - "jsondocId": "150a7494-b365-4911-83fe-abd8456a3fcb", + "jsondocId": "8261916e-a292-429d-ad93-a0954f60eeaa", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1358,7 +1321,7 @@ "allowedvalues": [] }, { - "jsondocId": "d9ee17f5-a9bf-4fc1-ae82-dea398d87697", + "jsondocId": "6c4ab7a5-a135-48f9-bc72-ff787a3d5e5d", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1367,21 +1330,21 @@ "allowedvalues": [] }, { - "jsondocId": "3c57be5a-2dbe-490c-84f8-41fdd5d5fa1a", + "jsondocId": "230cf0c7-78f3-4d32-8180-57f2600f44e2", "name": "features", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','old_non_reserved_properties':[{'color': 'red'}], 'new_non_reserved_properties': [{'color': 'green'}]}.", + "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Update attribute (key,value pair) for feature", - "methodName": "updateAttribute", - "jsondocId": "ebdd83fc-c139-4e45-82db-57cb0b5d8c67", + "description": "Set longest ORF", + "methodName": "setLongestOrf", + "jsondocId": "b8821165-4eaa-4e8e-a8dc-4dd243e64e06", "bodyobject": { - "jsondocId": "657f6f8d-d831-4989-b246-40aaaf9882c0", + "jsondocId": "94dfbbd8-6a03-4bfb-8fb6-f47d27015125", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1389,9 +1352,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/updateAttribute", + "path": "/annotationEditor/setLongestOrf", "response": { - "jsondocId": "9b7df634-5c96-48f5-9249-08bb1cefee3d", + "jsondocId": "e7051d23-2cc7-4d71-8cda-0e582357becb", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1404,7 +1367,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "c524ec2b-6351-4a21-acb3-e736dd99bf80", + "jsondocId": "8f9534b5-0792-4895-9f7d-b706e17e9baa", "name": "username", "format": "", "description": "", @@ -1413,7 +1376,7 @@ "allowedvalues": [] }, { - "jsondocId": "dd731535-1a58-439c-92de-9e0a39fc94e3", + "jsondocId": "f3c69bcb-ad92-4216-8543-a5e72e6eac53", "name": "password", "format": "", "description": "", @@ -1422,7 +1385,7 @@ "allowedvalues": [] }, { - "jsondocId": "c8363605-513b-4f51-a4d7-465754f4f422", + "jsondocId": "37b6867e-871a-4eb6-84c5-1fd787b12fad", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1431,7 +1394,7 @@ "allowedvalues": [] }, { - "jsondocId": "86003964-673b-4276-bbcd-54f7b2342fd4", + "jsondocId": "2567a901-6c13-439b-bd80-c9c4d84cc83e", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1440,21 +1403,21 @@ "allowedvalues": [] }, { - "jsondocId": "23046cb4-12b9-4bea-b7b3-210cd3294e28", + "jsondocId": "0388518d-45e9-4417-8590-aaebdb9dfedc", "name": "features", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','dbxrefs': [{'db': 'PMID', 'accession': '19448641'}]}.", + "description": "JSONArray containing feature objects with the location object defined {'uniquename':'ABCD-1234','location':{'fmin':2,'fmax':12}}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add dbxref (db,id pair) to feature", - "methodName": "addDbxref", - "jsondocId": "f0054dd2-727f-43d4-8b7a-3629bc62c38b", + "description": "Set boundaries of genomic feature", + "methodName": "setBoundaries", + "jsondocId": "8caafe60-9891-4b29-889d-30a57820b1c6", "bodyobject": { - "jsondocId": "01e44ab2-d4e7-4bdb-bacc-19db1bc17173", + "jsondocId": "8b5ce88e-9eae-417c-a24e-055de2c3578d", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1462,9 +1425,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addDbxref", + "path": "/annotationEditor/setBoundaries", "response": { - "jsondocId": "81eca0ef-a72d-4857-88e3-fd0976f0314a", + "jsondocId": "f7913bb5-a84a-4461-a323-b326b1b8a9b6", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1477,7 +1440,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "881b04a8-9814-4d86-a507-9822241fd94c", + "jsondocId": "6f841a2f-343e-4231-9801-fca5796a14da", "name": "username", "format": "", "description": "", @@ -1486,7 +1449,7 @@ "allowedvalues": [] }, { - "jsondocId": "ac632848-a397-4b02-9407-ad8cbf45b93a", + "jsondocId": "d973a72c-d873-42f7-bd1a-2e10664e69fe", "name": "password", "format": "", "description": "", @@ -1495,7 +1458,7 @@ "allowedvalues": [] }, { - "jsondocId": "418e209a-4570-4187-9aaf-300414d6d9f0", + "jsondocId": "ef69c342-ed8c-42d9-a779-94ef0226a9d4", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1504,30 +1467,21 @@ "allowedvalues": [] }, { - "jsondocId": "45745359-4f80-4441-aff7-7c9ec493c66d", + "jsondocId": "9aef0571-cccc-4224-b3de-f0364e010a3e", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", "type": "string", "required": "true", "allowedvalues": [] - }, - { - "jsondocId": "2cf92841-3cfa-461b-a7ed-982b468df713", - "name": "features", - "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','old_dbxrefs': [{'db': 'PMID', 'accession': '19448641'}], 'new_dbxrefs': [{'db': 'PMID', 'accession': '19448642'}]}.", - "type": "JSONArray", - "required": "true", - "allowedvalues": [] } ], "verb": "POST", - "description": "Update dbxrefs (db,id pairs) for a feature", - "methodName": "updateDbxref", - "jsondocId": "14168e33-e4d3-40c7-9863-76155095f88f", + "description": "Get all annotated features for a sequence", + "methodName": "getFeatures", + "jsondocId": "44f3ce2b-47fc-4354-b737-a2e62eaa5678", "bodyobject": { - "jsondocId": "d68eeefd-c42d-4164-ab51-5508be209f3c", + "jsondocId": "b0cb7eab-c6c9-479b-bfeb-4c29eec55eb1", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1535,9 +1489,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/updateDbxref", + "path": "/annotationEditor/getFeatures", "response": { - "jsondocId": "cbafcc91-aff6-4db7-b330-b7e8fb4b758d", + "jsondocId": "96ecd58f-c7d0-406a-9a9e-afebeb687c23", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1550,7 +1504,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "1ef8ef8e-ea76-449d-8233-14fb4eb7d77c", + "jsondocId": "fa37ae5c-2361-48b0-a741-38d4a6915939", "name": "username", "format": "", "description": "", @@ -1559,7 +1513,7 @@ "allowedvalues": [] }, { - "jsondocId": "bb8dc475-a7e2-474d-9c19-f8f440018a04", + "jsondocId": "f6df83e6-8312-49b5-b77e-32ce6a78be31", "name": "password", "format": "", "description": "", @@ -1568,7 +1522,7 @@ "allowedvalues": [] }, { - "jsondocId": "dd330186-3a6f-4dcd-bc6d-d0f08f4d2f29", + "jsondocId": "e800c06c-0573-4075-be81-f8b5e218a025", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1577,30 +1531,21 @@ "allowedvalues": [] }, { - "jsondocId": "311533f4-6914-4e0f-81a1-8205401504c4", + "jsondocId": "180d5aa7-6e38-4be3-89c2-c07877e1c353", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", "type": "string", "required": "true", "allowedvalues": [] - }, - { - "jsondocId": "6e8654b8-0e52-4766-bed6-f9ceac9902fe", - "name": "features", - "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','dbxrefs': [{'db': 'PMID', 'accession': '19448641'}]}.", - "type": "JSONArray", - "required": "true", - "allowedvalues": [] } ], "verb": "POST", - "description": "Delete dbxrefs (db,id pairs) for a feature", - "methodName": "deleteDbxref", - "jsondocId": "ca6d8970-7608-4eed-b597-43608dc6aa0e", + "description": "Get sequence alterations for a given sequence", + "methodName": "getSequenceAlterations", + "jsondocId": "1829c544-1215-4863-8b54-d10a7201504b", "bodyobject": { - "jsondocId": "22423233-e1f3-4cf3-8cf7-e56e8c591800", + "jsondocId": "4eed162a-ef5c-42f2-851a-2140d5c48c18", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1608,9 +1553,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteDbxref", + "path": "/annotationEditor/getSequenceAlterations", "response": { - "jsondocId": "f3164e08-c98e-4a25-a91e-e533aa911326", + "jsondocId": "57835750-0fb6-43fd-b54b-72e2d57a96ac", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1623,7 +1568,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "4096aa58-29fb-4408-9bc8-1865e9e6361d", + "jsondocId": "9dfb582d-f940-4153-adbb-1d3003406ac2", "name": "username", "format": "", "description": "", @@ -1632,7 +1577,7 @@ "allowedvalues": [] }, { - "jsondocId": "9b5e6098-228f-433a-b835-36f5b119cfb5", + "jsondocId": "c3d27d6a-a651-4395-a40e-0611b24e7c7f", "name": "password", "format": "", "description": "", @@ -1641,7 +1586,7 @@ "allowedvalues": [] }, { - "jsondocId": "a08e69e0-7a40-4b66-a3f0-a2f9ab1e5e6e", + "jsondocId": "8fda7e8a-5621-4639-96f4-2bc46bb7345e", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1650,7 +1595,7 @@ "allowedvalues": [] }, { - "jsondocId": "28145b76-887e-44a9-a0e6-d94502f28569", + "jsondocId": "2f4a5a1a-1462-45cd-905c-2c78e3898020", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1659,21 +1604,21 @@ "allowedvalues": [] }, { - "jsondocId": "74f5572e-65c9-4dd3-83e6-ea3f1f7caa27", + "jsondocId": "5ad1b623-b04b-420e-b18c-f599a47ed572", "name": "features", "format": "", - "description": "JSONArray with one feature object {'uniquename':'ABCD-1234'}", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','non_reserved_properties':[{'tag':'clockwork','value':'orange'},{'tag':'color','value':'purple'}]}. Available status found here: /availableStatus/ ", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set readthrough stop codon", - "methodName": "setReadthroughStopCodon", - "jsondocId": "92eafae6-4395-4c8e-b292-d61b2076e26e", + "description": "Delete attribute (key,value pair) for feature", + "methodName": "deleteAttribute", + "jsondocId": "0b5f32bb-d531-4e82-b303-22de32168acf", "bodyobject": { - "jsondocId": "14b7f773-40db-4f19-a239-b52ccd8cd548", + "jsondocId": "e0ce32cc-b2d1-4c0c-a39c-909e764ac5f9", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1681,9 +1626,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setReadthroughStopCodon", + "path": "/annotationEditor/deleteAttribute", "response": { - "jsondocId": "bdff136f-fcb5-48b8-8262-acc21b75c2c2", + "jsondocId": "c34ef8ef-32d8-4bed-9cdb-fd818c0dd508", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1696,7 +1641,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "9dc1060e-5ced-4a15-8bb6-eadbe8cd8424", + "jsondocId": "73ec4588-0b01-4eae-9701-c9e0b40c2839", "name": "username", "format": "", "description": "", @@ -1705,7 +1650,7 @@ "allowedvalues": [] }, { - "jsondocId": "02fc00dc-7c49-4e9b-80b4-19c973e4df86", + "jsondocId": "5b31a32a-dc23-43eb-b155-709724b9f8d0", "name": "password", "format": "", "description": "", @@ -1714,7 +1659,7 @@ "allowedvalues": [] }, { - "jsondocId": "4607d9d2-e61b-46a4-a41b-667bc3c837f9", + "jsondocId": "cdc160b4-fc38-46ab-b6f5-170b983a55f3", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1723,7 +1668,7 @@ "allowedvalues": [] }, { - "jsondocId": "fd8cf2c8-8e9d-462f-afe7-b473c2506117", + "jsondocId": "2209d719-03ff-4427-959e-fc0167363e1a", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1732,21 +1677,21 @@ "allowedvalues": [] }, { - "jsondocId": "f5dc5ed9-c344-4048-a87a-7d8bc014e070", + "jsondocId": "1371478b-9962-4a69-b2a8-e7e35657f5ad", "name": "features", "format": "", - "description": "JSONArray with Sequence Alteration (Insertion, Deletion, Substituion) objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','old_non_reserved_properties':[{'color': 'red'}], 'new_non_reserved_properties': [{'color': 'green'}]}.", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add sequence alteration", - "methodName": "addSequenceAlteration", - "jsondocId": "7deaa996-1f69-406b-bcae-b0427e1e11fe", + "description": "Update attribute (key,value pair) for feature", + "methodName": "updateAttribute", + "jsondocId": "d78e05e7-1934-452e-a6b7-ab8e74b40929", "bodyobject": { - "jsondocId": "f62d2dc9-d1c1-47a9-9256-bd7fd8a7e76a", + "jsondocId": "f9b188f7-7a19-4fd2-ac02-239288c7709a", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1754,9 +1699,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addSequenceAlteration", + "path": "/annotationEditor/updateAttribute", "response": { - "jsondocId": "a7630ae2-5a58-4296-80aa-4deed934d374", + "jsondocId": "fe7716be-4a63-4805-a975-52ca45fe6f8b", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1769,7 +1714,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "a0998f43-d3f9-4f46-a264-5da3ffda322f", + "jsondocId": "51d7b025-06c8-4d21-9d66-864ad66b4eda", "name": "username", "format": "", "description": "", @@ -1778,7 +1723,7 @@ "allowedvalues": [] }, { - "jsondocId": "6999e994-c3a1-4bd4-b86c-83e7c0b8f371", + "jsondocId": "1950e766-2125-403e-b276-293aefd0c736", "name": "password", "format": "", "description": "", @@ -1787,7 +1732,7 @@ "allowedvalues": [] }, { - "jsondocId": "7d660359-27a3-437b-86cf-1a568bf6b737", + "jsondocId": "95a4c086-0007-4c5d-b27d-6375d50f13f7", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1796,7 +1741,7 @@ "allowedvalues": [] }, { - "jsondocId": "fe76806b-7c85-4aaf-93f2-a27a1bf4cb30", + "jsondocId": "7f297755-6cfb-47ef-9d58-b23ea77ceed0", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1805,21 +1750,21 @@ "allowedvalues": [] }, { - "jsondocId": "3f1837ef-c720-4fed-8de9-76e3652c7a8e", + "jsondocId": "a2e96230-5b49-4c76-a1da-8908de2affba", "name": "features", "format": "", - "description": "JSONArray with Sequence Alteration identified by unique names {'uniquename':'ABC123'}", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','dbxrefs': [{'db': 'PMID', 'accession': '19448641'}]}.", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete sequence alteration", - "methodName": "deleteSequenceAlteration", - "jsondocId": "c205d4f8-dc7e-4517-b71c-a359b1717bd8", + "description": "Add dbxref (db,id pair) to feature", + "methodName": "addDbxref", + "jsondocId": "89d51b3e-58cd-493b-a630-826f958697ee", "bodyobject": { - "jsondocId": "8ae57d17-0e72-4bf2-b029-874ab463309f", + "jsondocId": "dd382c76-f9d8-45ad-93e8-82f20d4d1a34", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1827,9 +1772,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteSequenceAlteration", + "path": "/annotationEditor/addDbxref", "response": { - "jsondocId": "97a4e62d-2a07-47c6-8610-6f5d775e233e", + "jsondocId": "dda1b4de-e641-49bc-b2f6-2bd1e0a47dfd", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1842,7 +1787,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "13ec68bc-b1d7-4cac-b792-50bdcdf8e3b2", + "jsondocId": "edefa2de-b2e4-40a5-9821-6bf21266d1d0", "name": "username", "format": "", "description": "", @@ -1851,7 +1796,7 @@ "allowedvalues": [] }, { - "jsondocId": "e4fe033d-05a8-4d23-9966-c770127c2f01", + "jsondocId": "719e5953-c5cb-4e5b-a149-68c667e85a76", "name": "password", "format": "", "description": "", @@ -1860,7 +1805,7 @@ "allowedvalues": [] }, { - "jsondocId": "224948f4-6e23-4fa7-a791-7bd97d53e6ca", + "jsondocId": "b4d178c3-c748-4fe6-a1c8-36f6344e2fe1", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1869,7 +1814,7 @@ "allowedvalues": [] }, { - "jsondocId": "628e0079-cf84-468b-b4aa-50f0a90bee54", + "jsondocId": "e538c57c-90e2-4415-8ee6-b5431655f24e", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1878,21 +1823,21 @@ "allowedvalues": [] }, { - "jsondocId": "bc6849fe-0e85-4fc5-bdb3-a2a3572e1b1d", + "jsondocId": "db3840e1-655d-41c7-90f8-3270f7faa1a9", "name": "features", "format": "", - "description": "JSONArray with with objects of features defined as {'uniquename':'ABC123'}", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','old_dbxrefs': [{'db': 'PMID', 'accession': '19448641'}], 'new_dbxrefs': [{'db': 'PMID', 'accession': '19448642'}]}.", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Flip strand", - "methodName": "flipStrand", - "jsondocId": "0dd9dc6f-feda-4b9d-89ec-2b42f668f6e5", + "description": "Update dbxrefs (db,id pairs) for a feature", + "methodName": "updateDbxref", + "jsondocId": "b27c085e-c668-4f3f-b096-484d75f37ee9", "bodyobject": { - "jsondocId": "b9c446cb-22b2-45f0-9309-947d644dc709", + "jsondocId": "244021d2-96a6-47e2-b12c-d936523cef29", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1900,9 +1845,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/flipStrand", + "path": "/annotationEditor/updateDbxref", "response": { - "jsondocId": "2cb035e2-5567-411b-9d59-6f05e5a6635c", + "jsondocId": "cbfbf2ca-ef17-4b40-b2ed-889af8ece2ce", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1915,7 +1860,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "5b6a2195-91f4-45d4-8c40-e850f5000131", + "jsondocId": "999d191f-b43d-453a-812b-dec2e7f4abc3", "name": "username", "format": "", "description": "", @@ -1924,7 +1869,7 @@ "allowedvalues": [] }, { - "jsondocId": "5e130b12-42f2-458d-a1b3-7149256b613b", + "jsondocId": "0fb1af82-b23d-4eb8-82fa-cadc99ef31a8", "name": "password", "format": "", "description": "", @@ -1933,7 +1878,7 @@ "allowedvalues": [] }, { - "jsondocId": "7a83c67b-597c-4d36-9745-e34b00f706a5", + "jsondocId": "48fa1e4d-d90f-49ee-9b91-72a069fab444", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -1942,7 +1887,7 @@ "allowedvalues": [] }, { - "jsondocId": "b3371029-d138-45d9-afaf-73d61b73c613", + "jsondocId": "4f241720-3dae-4bd0-9c78-c28701a68680", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -1951,21 +1896,21 @@ "allowedvalues": [] }, { - "jsondocId": "4da6e664-6dc0-4914-8d75-2a58621c0cff", + "jsondocId": "1d8149c5-e4a6-4a06-a8d5-8821bfc29e57", "name": "features", "format": "", - "description": "JSONArray with with two objects of referred to as defined as {'uniquename':'ABC123'}", + "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','dbxrefs': [{'db': 'PMID', 'accession': '19448641'}]}.", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Merge exons", - "methodName": "mergeExons", - "jsondocId": "a66e5636-3e4f-4287-aa6b-b78391754959", + "description": "Delete dbxrefs (db,id pairs) for a feature", + "methodName": "deleteDbxref", + "jsondocId": "a3e0e41f-a95e-48af-b240-d2b8e605fefe", "bodyobject": { - "jsondocId": "975b7d2b-500f-47ec-82d9-45a134034f0f", + "jsondocId": "39676b54-42de-48e4-8b0e-8f5b75817087", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -1973,9 +1918,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/mergeExons", + "path": "/annotationEditor/deleteDbxref", "response": { - "jsondocId": "8ffcdce1-aad6-41b2-ae14-60c9e8a4a1f9", + "jsondocId": "445d52a1-549c-4dd9-a5f1-4abfd3940b56", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -1988,7 +1933,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "fff6b74e-e668-45d4-b93d-84ae532fc929", + "jsondocId": "741ecd6e-93e0-452c-99d6-2f11a20e27ff", "name": "username", "format": "", "description": "", @@ -1997,7 +1942,7 @@ "allowedvalues": [] }, { - "jsondocId": "912916f5-a257-4bcc-9f6b-177261a3444b", + "jsondocId": "0fe1cd1d-3066-4cfd-9ad2-6d5a94a3bbd6", "name": "password", "format": "", "description": "", @@ -2006,7 +1951,7 @@ "allowedvalues": [] }, { - "jsondocId": "b974ee45-2bed-4573-b967-46635cb19650", + "jsondocId": "23d793a3-8ef9-4e6a-a885-e151c8fc1fac", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2015,7 +1960,7 @@ "allowedvalues": [] }, { - "jsondocId": "39b4c1af-e320-434b-81cb-c58bbeb6fc69", + "jsondocId": "59530d60-c1d2-44d4-8f5a-dc8efb39a296", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2024,21 +1969,21 @@ "allowedvalues": [] }, { - "jsondocId": "d81a24d9-5897-42d6-b8cd-f3c8b248658b", + "jsondocId": "56a6e06c-0f50-4e82-9b5f-1906780170af", "name": "features", "format": "", - "description": "JSONArray containing feature objects with the location object defined {'uniquename':'ABCD-1234','location':{'fmin':2,'fmax':12}}", + "description": "JSONArray with one feature object {'uniquename':'ABCD-1234'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Split exons", - "methodName": "splitExon", - "jsondocId": "4a35a82c-f93e-41ac-b2da-20b1a22c1ee4", + "description": "Set readthrough stop codon", + "methodName": "setReadthroughStopCodon", + "jsondocId": "917e3f5b-a977-412c-bf00-48be98d16e2e", "bodyobject": { - "jsondocId": "3cb50ce3-b814-41a4-8099-35e9422d3aa0", + "jsondocId": "3c127092-09b5-4f53-9f10-6252ca0c846b", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2046,9 +1991,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/splitExon", + "path": "/annotationEditor/setReadthroughStopCodon", "response": { - "jsondocId": "a436d1b0-097f-4c54-b773-8a1fb576639b", + "jsondocId": "d5df849f-2c48-45e6-856e-57ddbcce613b", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2061,7 +2006,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "3bfd5afa-616a-4ec4-b5cb-e8678ae2f9b2", + "jsondocId": "da364460-31f8-4945-a23d-11ce6349f860", "name": "username", "format": "", "description": "", @@ -2070,7 +2015,7 @@ "allowedvalues": [] }, { - "jsondocId": "9db8247c-c31b-4814-82b6-0e9c57dea628", + "jsondocId": "a5c06f83-25b9-4be0-bf72-a23d2809a19b", "name": "password", "format": "", "description": "", @@ -2079,7 +2024,7 @@ "allowedvalues": [] }, { - "jsondocId": "9b0952a2-fce7-4d07-adf6-bd96fa20652e", + "jsondocId": "92bab0ef-3227-4848-b37e-045b525515b1", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2088,7 +2033,7 @@ "allowedvalues": [] }, { - "jsondocId": "d3f1da83-1ed3-4af4-8ca3-979257254946", + "jsondocId": "357a3fc7-00da-4620-a1c9-507decfa7e26", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2097,21 +2042,21 @@ "allowedvalues": [] }, { - "jsondocId": "e7d90c67-acf2-40b5-b151-d0804e6963f6", + "jsondocId": "207ad485-5c60-426e-bb22-84122e1e933f", "name": "features", "format": "", - "description": "JSONArray of features objects to delete defined by unique name {'uniquename':'ABC123'}", + "description": "JSONArray with Sequence Alteration (Insertion, Deletion, Substituion) objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete feature", - "methodName": "deleteFeature", - "jsondocId": "16ce8052-9f72-425a-8a23-19c9eca2cdbc", + "description": "Add sequence alteration", + "methodName": "addSequenceAlteration", + "jsondocId": "81a6f59c-bb50-47f2-a8d0-7a92a4542f71", "bodyobject": { - "jsondocId": "09c65ef5-d899-46b9-9af0-14141d0f92b3", + "jsondocId": "47218ae2-3d73-416a-819a-5e6024fc61a6", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2119,9 +2064,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteFeature", + "path": "/annotationEditor/addSequenceAlteration", "response": { - "jsondocId": "00de4e6e-e59e-4324-8804-5da162eff1e1", + "jsondocId": "fc6d3f1a-60ca-44ac-9b8c-9a5cd7607c08", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2134,7 +2079,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "122a056e-6a17-4808-892d-e16f747e198e", + "jsondocId": "3d4d5804-0a97-467e-8c71-1ae2545625a1", "name": "username", "format": "", "description": "", @@ -2143,7 +2088,7 @@ "allowedvalues": [] }, { - "jsondocId": "c7f868ac-39ce-4804-ac68-cdd68b861f4b", + "jsondocId": "66509b2f-e602-4a49-8ad4-e6cc2364153f", "name": "password", "format": "", "description": "", @@ -2152,7 +2097,7 @@ "allowedvalues": [] }, { - "jsondocId": "e490fc90-be05-4a17-9682-3aeb4c5f3a41", + "jsondocId": "4d62f180-c3a7-4419-9497-30b15918d0d6", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2161,7 +2106,7 @@ "allowedvalues": [] }, { - "jsondocId": "cf6c4cc2-b991-4d64-ac2b-f9b0c0be355c", + "jsondocId": "473b6e2d-2014-459a-950c-1fded39fddb3", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2170,21 +2115,21 @@ "allowedvalues": [] }, { - "jsondocId": "1e45c0f7-1e9d-48fd-ac3c-a8c9b6e3bc91", - "name": "sequence", + "jsondocId": "90812131-6545-4e16-803c-31211fc745e4", + "name": "features", "format": "", - "description": "JSONArray of sequence id object to delete defined by {id:} ", + "description": "JSONArray with Sequence Alteration identified by unique names {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete variant effects for sequences", - "methodName": "deleteVariantEffectsForSequences", - "jsondocId": "9e44875d-10f6-4640-a228-064cedf30cbb", + "description": "Delete sequence alteration", + "methodName": "deleteSequenceAlteration", + "jsondocId": "af7f9731-3daa-4e07-8734-9596705ebbd6", "bodyobject": { - "jsondocId": "fd2054c1-2526-4a65-ba8e-847e0a193699", + "jsondocId": "31b2a71e-a3f9-4b62-b460-b74a2635a53e", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2192,9 +2137,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteVariantEffectsForSequences", + "path": "/annotationEditor/deleteSequenceAlteration", "response": { - "jsondocId": "dbee082b-f00b-4ee4-9e38-bb1d80b2d7d6", + "jsondocId": "27ad48fe-3b70-465d-89ea-e4aad97f9abe", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2207,7 +2152,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "2e07118e-40dd-4de4-8e1c-bd8af6c32c29", + "jsondocId": "4b6c8a95-0f2f-44c6-b014-4e24b3ee3396", "name": "username", "format": "", "description": "", @@ -2216,7 +2161,7 @@ "allowedvalues": [] }, { - "jsondocId": "9faa8813-a6fe-46d8-8e4a-6f45114ecf88", + "jsondocId": "c6ec33c2-5f4b-4c77-aef1-524ad8873765", "name": "password", "format": "", "description": "", @@ -2225,7 +2170,7 @@ "allowedvalues": [] }, { - "jsondocId": "c9bc9dba-629b-4929-b3f1-601272adcde6", + "jsondocId": "149e80da-96a9-41d9-ab19-9ca7978d337f", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2234,7 +2179,7 @@ "allowedvalues": [] }, { - "jsondocId": "04077fe7-f7d5-47cb-9b0f-ddd79316b0d5", + "jsondocId": "5dc07f5d-cf85-41d0-9658-464c03878831", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2243,21 +2188,21 @@ "allowedvalues": [] }, { - "jsondocId": "dfcb3c27-8673-49eb-8f94-c16f9a78aae7", - "name": "sequence", + "jsondocId": "632f2df1-81bd-4031-9e1a-21dc5398777c", + "name": "features", "format": "", - "description": "JSONArray of sequence id object to delete defined by {id:} ", + "description": "JSONArray with with objects of features defined as {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete features for sequences", - "methodName": "deleteFeaturesForSequences", - "jsondocId": "ca12b0a0-45d3-4b58-9405-c3c5e317a2e7", + "description": "Flip strand", + "methodName": "flipStrand", + "jsondocId": "2a91afbe-50ab-450c-80e6-72086a3704d7", "bodyobject": { - "jsondocId": "e4d984f1-b7ec-42f8-979e-771d3e580026", + "jsondocId": "2c49d4e1-95e3-4d09-bda6-f6d8d89288cb", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2265,9 +2210,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteFeaturesForSequences", + "path": "/annotationEditor/flipStrand", "response": { - "jsondocId": "fc020951-54c6-4084-a4c4-d875a920c3e1", + "jsondocId": "81d9b25d-615c-443e-a466-6de5346861b1", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2280,7 +2225,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "353f071d-ea3b-4254-9386-56284867dd80", + "jsondocId": "850b542e-d087-4246-acc1-1514e05f22bf", "name": "username", "format": "", "description": "", @@ -2289,7 +2234,7 @@ "allowedvalues": [] }, { - "jsondocId": "aafd426b-3d37-4da7-a0e3-07ec04898f78", + "jsondocId": "34d135fc-a814-4dff-907a-fe01a60b3cdf", "name": "password", "format": "", "description": "", @@ -2298,7 +2243,7 @@ "allowedvalues": [] }, { - "jsondocId": "866d63f6-7d08-4321-a608-5baafb34587e", + "jsondocId": "14365a26-00aa-42c3-a17a-b91641140bb3", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2307,7 +2252,7 @@ "allowedvalues": [] }, { - "jsondocId": "a9d5756e-0055-4541-a6b4-f67585e9fcdd", + "jsondocId": "21e39c5e-fc7c-4b09-bdcd-ce4844f0f3bb", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2316,21 +2261,21 @@ "allowedvalues": [] }, { - "jsondocId": "8613dd09-04a0-4c51-bff7-2fb53bd44e82", + "jsondocId": "613c253b-68e2-4e34-abea-12af1918fba0", "name": "features", "format": "", - "description": "JSONArray of features objects, where the first is the parent transcript and the remaining are exons all defined by a unique name {'uniquename':'ABC123'}", + "description": "JSONArray with with two objects of referred to as defined as {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Delete exons", - "methodName": "deleteExon", - "jsondocId": "aeefd111-14a1-46b4-8e12-e4c8c81d07c6", + "description": "Merge exons", + "methodName": "mergeExons", + "jsondocId": "591c899e-58eb-450c-8e09-ee43709e1dc1", "bodyobject": { - "jsondocId": "27e52244-7403-45c4-810f-1c09d0350a9a", + "jsondocId": "813b534f-951f-4f27-bc41-9f0bc3232957", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2338,9 +2283,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/deleteExon", + "path": "/annotationEditor/mergeExons", "response": { - "jsondocId": "82e6d800-0c89-46a4-b9d1-a35840e4994b", + "jsondocId": "01ae06bb-0209-4035-87a5-6f5681a31cf1", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2353,7 +2298,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "a299598a-76a2-49e0-9f8d-fe6ddcff69cc", + "jsondocId": "e565d136-cb41-49ee-bbe8-a973e8b09067", "name": "username", "format": "", "description": "", @@ -2362,7 +2307,7 @@ "allowedvalues": [] }, { - "jsondocId": "64bed79b-0ae1-4238-beb4-d354501cc15a", + "jsondocId": "b5a3700d-4007-40a0-b029-a445315f92dc", "name": "password", "format": "", "description": "", @@ -2371,7 +2316,7 @@ "allowedvalues": [] }, { - "jsondocId": "116c4b51-85bc-4931-a984-718a32d96137", + "jsondocId": "fe85eeb1-83d8-446b-be2f-307a8bd7bf54", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2380,7 +2325,7 @@ "allowedvalues": [] }, { - "jsondocId": "5aa6bbfe-80b4-4987-9cf5-972a33793bdd", + "jsondocId": "1d3c3770-e5cc-4d57-a18f-1e8a245343d9", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2389,21 +2334,21 @@ "allowedvalues": [] }, { - "jsondocId": "36038305-2b8b-4e11-b754-fc2d533767ce", + "jsondocId": "908d9592-9512-45c9-bdea-7f712d98d8a2", "name": "features", "format": "", - "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmin':12}}", + "description": "JSONArray containing feature objects with the location object defined {'uniquename':'ABCD-1234','location':{'fmin':2,'fmax':12}}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Make intron", - "methodName": "makeIntron", - "jsondocId": "9cf41b5b-f670-41f7-afb1-04641acf3515", + "description": "Split exons", + "methodName": "splitExon", + "jsondocId": "50223b6b-c611-481e-aa0f-7ca981f2f4ff", "bodyobject": { - "jsondocId": "709ba56e-3e0f-4520-8b92-4f82648ef810", + "jsondocId": "173c25d9-1d30-4d43-ad81-fc24b59c4a95", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2411,9 +2356,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/makeIntron", + "path": "/annotationEditor/splitExon", "response": { - "jsondocId": "c333c6f3-bae1-4485-bf23-901b3b4fc38e", + "jsondocId": "4d3ca66e-0f44-418e-977a-0f8838cd4722", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2426,7 +2371,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "55c77be6-e690-4277-8b8d-46be6010da40", + "jsondocId": "c557e7fb-5c52-408c-9799-65918012e718", "name": "username", "format": "", "description": "", @@ -2435,7 +2380,7 @@ "allowedvalues": [] }, { - "jsondocId": "672f3584-ba29-49c1-8560-44d9e27498b8", + "jsondocId": "4422e336-12f2-4e2b-b939-cc64ae0b576c", "name": "password", "format": "", "description": "", @@ -2444,7 +2389,7 @@ "allowedvalues": [] }, { - "jsondocId": "8369baff-dea9-4d34-8346-ef013c721e4e", + "jsondocId": "34352e36-0264-4460-abec-9554398b7d37", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2453,7 +2398,7 @@ "allowedvalues": [] }, { - "jsondocId": "efd0f3ba-e7bf-45c9-8730-e813edb8ec2e", + "jsondocId": "a3516599-f473-417c-9500-6fc4d282efaa", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2462,21 +2407,21 @@ "allowedvalues": [] }, { - "jsondocId": "a694bdd8-bc4b-4ce2-be21-6a84cb3ed345", + "jsondocId": "3dad7e70-284a-40f5-ba79-6bcea7e96d87", "name": "features", "format": "", - "description": "JSONArray with with two exon objects referred to their unique names {'uniquename':'ABC123'}", + "description": "JSONArray of features objects to delete defined by unique name {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Split transcript", - "methodName": "splitTranscript", - "jsondocId": "0fc5cb8b-0a74-41eb-81ad-b624d37a77c4", + "description": "Delete feature", + "methodName": "deleteFeature", + "jsondocId": "d61952a5-d797-4277-9754-fee1a16172a4", "bodyobject": { - "jsondocId": "7d8461d5-faf5-4270-ae4c-014857754b61", + "jsondocId": "8b7f778c-85e9-4e55-9c0c-b122a4233f0d", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2484,9 +2429,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/splitTranscript", + "path": "/annotationEditor/deleteFeature", "response": { - "jsondocId": "06b743ab-defc-4959-b053-f1982cf3465d", + "jsondocId": "5d175a27-4bd4-44ee-8eaa-c033551da885", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2499,7 +2444,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "f601e058-25f7-4bc9-9853-7e8700ca1d56", + "jsondocId": "2f673c72-db3b-43b9-a7bf-0580c52a56e8", "name": "username", "format": "", "description": "", @@ -2508,7 +2453,7 @@ "allowedvalues": [] }, { - "jsondocId": "89956f9b-5dbf-4c82-96d2-bb5bb53fc9c7", + "jsondocId": "bf64d6f8-37b9-449d-b93d-5c04aa20fd68", "name": "password", "format": "", "description": "", @@ -2517,7 +2462,7 @@ "allowedvalues": [] }, { - "jsondocId": "8e58dc43-9049-40cd-8b1e-54965345d28d", + "jsondocId": "bd692e35-5ea8-43b0-9241-346e83fee6ce", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2526,7 +2471,7 @@ "allowedvalues": [] }, { - "jsondocId": "500868b4-9404-47b7-a1b5-e18473576c2c", + "jsondocId": "eca6c549-9c6d-48c9-a703-0761466cbb7a", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2535,21 +2480,21 @@ "allowedvalues": [] }, { - "jsondocId": "7a8523b3-4e51-43f8-a153-58106602b603", - "name": "features", + "jsondocId": "96595d57-66b7-458f-b0b7-9111e7e1795c", + "name": "sequence", "format": "", - "description": "JSONArray with with two transcript objects referred to their unique names {'uniquename':'ABC123'}", + "description": "JSONArray of sequence id object to delete defined by {id:} ", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Merge transcripts", - "methodName": "mergeTranscripts", - "jsondocId": "ec287eee-542c-49ee-ba82-2376ace03eb0", + "description": "Delete variant effects for sequences", + "methodName": "deleteVariantEffectsForSequences", + "jsondocId": "62354745-fc38-41bc-a6e1-85e0d38288df", "bodyobject": { - "jsondocId": "cf9fbc6e-c3b1-41c3-90c6-b8288d192649", + "jsondocId": "2a83d98a-530f-40b1-854f-b44c325df587", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2557,9 +2502,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/mergeTranscripts", + "path": "/annotationEditor/deleteVariantEffectsForSequences", "response": { - "jsondocId": "b6146a7d-1410-46cf-9f7d-10aac2ef2cf4", + "jsondocId": "13157846-f4ec-4f73-a73b-0a114bb466c4", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2572,7 +2517,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "bc470549-5f60-4308-aa9d-89ea3488924c", + "jsondocId": "7923f21f-71b3-4681-a67b-144826cc01d9", "name": "username", "format": "", "description": "", @@ -2581,7 +2526,7 @@ "allowedvalues": [] }, { - "jsondocId": "c2bf12b5-da29-4022-8cbd-16ef552e6343", + "jsondocId": "859ad57b-e6e9-4874-b568-ba7fc4a28e4c", "name": "password", "format": "", "description": "", @@ -2590,21 +2535,39 @@ "allowedvalues": [] }, { - "jsondocId": "ce58c35f-940f-4647-8d5c-befb318fdfee", - "name": "days", + "jsondocId": "c4b83274-2da2-4130-9263-41e4c73ba5aa", + "name": "sequence", "format": "", - "description": "Number of past days to retrieve annotations from.", - "type": "Integer", + "description": "(optional) Sequence name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "b40c39cc-722e-4db8-b5d1-7d926b06c288", + "name": "organism", + "format": "", + "description": "(optional) Organism ID or common name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "2535e77a-0823-4192-97b6-1b491a4bb806", + "name": "sequence", + "format": "", + "description": "JSONArray of sequence id object to delete defined by {id:} ", + "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Get genes created or updated in the past, Returns JSON hash gene_name:organism", - "methodName": "getRecentAnnotations", - "jsondocId": "2a3fa432-5f7c-42e0-8c8a-a26c1ee1a4bb", + "description": "Delete features for sequences", + "methodName": "deleteFeaturesForSequences", + "jsondocId": "e7b566f6-0fa8-49d3-9626-8c9c312a19b1", "bodyobject": { - "jsondocId": "f5f76913-db2c-41cc-b380-77c5df547c65", + "jsondocId": "d271690e-b08d-4f34-9810-afc494960318", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2612,9 +2575,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getRecentAnnotations", + "path": "/annotationEditor/deleteFeaturesForSequences", "response": { - "jsondocId": "23d9d1b7-563c-4a1e-bd74-42f378e061e4", + "jsondocId": "90b27e95-34f3-44b9-9a33-39315e1a3b85", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2627,7 +2590,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "ae1a9611-1e12-4102-a15d-5d9532a75ff1", + "jsondocId": "4f52d550-614b-49c3-aaae-52e4afacd7b4", "name": "username", "format": "", "description": "", @@ -2636,7 +2599,7 @@ "allowedvalues": [] }, { - "jsondocId": "9ce7bf3a-1580-4023-a529-31cbfcbc18f9", + "jsondocId": "851bafd1-b67b-41a7-96dc-e9252d08bffe", "name": "password", "format": "", "description": "", @@ -2645,16 +2608,7 @@ "allowedvalues": [] }, { - "jsondocId": "ea171324-8ffe-4519-831c-42c22c623dfc", - "name": "organism", - "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "1765bb81-c949-42e9-9698-a3891bd1c0d3", + "jsondocId": "67244e19-e2d4-4748-ac49-36daa5c028ba", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2663,39 +2617,30 @@ "allowedvalues": [] }, { - "jsondocId": "72efaa1c-af06-403b-905c-f840113f12e6", - "name": "suppressHistory", - "format": "", - "description": "Suppress the history of this operation", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "dd054f56-adca-453b-87b1-9e4717f6b89c", - "name": "suppressEvents", + "jsondocId": "9eaf0472-5667-46e2-b267-cb9589d12d33", + "name": "organism", "format": "", - "description": "Suppress instant update of the user interface", - "type": "boolean", + "description": "(optional) Organism ID or common name", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "a88d5d00-f6f5-404b-aa1b-d7042eb2e03c", + "jsondocId": "b2590c76-9c51-4646-b071-e435e28bbae7", "name": "features", "format": "", - "description": "JSONArray of JSON feature objects described by https://github.com/GMOD/Apollo/blob/master/grails-app/domain/org/bbop/apollo/Feature.groovy", + "description": "JSONArray of features objects, where the first is the parent transcript and the remaining are exons all defined by a unique name {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set exon feature boundaries", - "methodName": "setExonBoundaries", - "jsondocId": "d35040dd-7b9f-4dee-9f25-9de4f20f0426", + "description": "Delete exons", + "methodName": "deleteExon", + "jsondocId": "93e78dda-061c-4201-af55-f7e961f6dec7", "bodyobject": { - "jsondocId": "bac05aa2-8c9a-4bb2-bb29-d64b9267e3db", + "jsondocId": "6a83004d-ec57-4868-945b-deb65c5b0973", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2703,9 +2648,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setExonBoundaries", + "path": "/annotationEditor/deleteExon", "response": { - "jsondocId": "e5971e1a-22d8-4e9a-8867-bc1b87c0d238", + "jsondocId": "28b6f4a4-6714-4868-92d4-6b4230c3248b", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2718,7 +2663,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "749b02af-b3c5-484e-9478-9fe72ede4dbc", + "jsondocId": "cc0c756b-39da-4fc7-960d-18011655379c", "name": "username", "format": "", "description": "", @@ -2727,7 +2672,7 @@ "allowedvalues": [] }, { - "jsondocId": "8a90568b-3a1d-4b23-a745-fc7f8b5eb82a", + "jsondocId": "fef84e10-ab04-4f95-8728-775de9cd5725", "name": "password", "format": "", "description": "", @@ -2736,7 +2681,7 @@ "allowedvalues": [] }, { - "jsondocId": "7c639dad-9962-44db-8173-80a0fa4ff7aa", + "jsondocId": "94a00f20-e159-423b-a726-69444e1df187", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2745,7 +2690,7 @@ "allowedvalues": [] }, { - "jsondocId": "f00087b0-b6f9-4c4d-b035-d020b19eefb8", + "jsondocId": "9dea2ba3-5e3d-4b3a-9806-0e40d11396d5", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2754,21 +2699,21 @@ "allowedvalues": [] }, { - "jsondocId": "5a7e183a-3703-45b9-8b04-dfb5d030f20b", + "jsondocId": "387e962a-04d0-4eab-bb0c-846a1ad73279", "name": "features", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','description':'some descriptive test'}", + "description": "JSONArray containing a single JSONObject feature that contains {'uniquename':'ABCD-1234','location':{'fmin':12}}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set description for a feature", - "methodName": "setDescription", - "jsondocId": "49a9c9c9-c1f0-431b-a522-8a69961cec03", + "description": "Make intron", + "methodName": "makeIntron", + "jsondocId": "f4185a29-eee1-4db2-bdac-6b55bfcf75e3", "bodyobject": { - "jsondocId": "c7172e5a-6a0d-4a01-b372-4c97eda0a221", + "jsondocId": "484813c0-6c6f-44f9-b92d-0c4dd33e58ee", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2776,9 +2721,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setDescription", + "path": "/annotationEditor/makeIntron", "response": { - "jsondocId": "0e21edad-1da3-49e3-9ac2-f02948045f61", + "jsondocId": "d171fe80-8420-4959-be39-cb7ec629de34", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2791,7 +2736,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "9aa0e770-1c24-41f9-b76d-5a73f63f9d02", + "jsondocId": "3365edf1-1fa1-4127-a045-783335912233", "name": "username", "format": "", "description": "", @@ -2800,7 +2745,7 @@ "allowedvalues": [] }, { - "jsondocId": "a2465de4-3ec3-44ce-9c86-23962cbfdb84", + "jsondocId": "5ca154d5-aeba-4bd0-b4fc-a86792f13825", "name": "password", "format": "", "description": "", @@ -2809,7 +2754,7 @@ "allowedvalues": [] }, { - "jsondocId": "63b941e7-2333-4142-b6d2-04681f0915d3", + "jsondocId": "212f3a5a-b6e2-475e-85dc-c63c1d243d10", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2818,7 +2763,7 @@ "allowedvalues": [] }, { - "jsondocId": "ae86ceb5-2f8e-4cf3-9bb2-da581ddae77c", + "jsondocId": "ade777cd-ec35-410e-97ce-3ad7fdcbebd1", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2827,21 +2772,21 @@ "allowedvalues": [] }, { - "jsondocId": "2cfa6e4b-c2ed-45e2-bc69-999827f26648", + "jsondocId": "1672b7c7-8551-40dc-a90a-08483269b1b4", "name": "features", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','symbol':'Pax6a'}", + "description": "JSONArray with with two exon objects referred to their unique names {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Set symbol of a feature", - "methodName": "setSymbol", - "jsondocId": "175af50b-ec32-4e71-b007-ddf86f11446c", + "description": "Split transcript", + "methodName": "splitTranscript", + "jsondocId": "68be6339-98f4-4731-b2da-91fc00fc896f", "bodyobject": { - "jsondocId": "11b7378b-01d2-46d2-adf3-514d462bf6e8", + "jsondocId": "576a7972-967d-4e2a-9fe9-7097ae2f429e", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2849,9 +2794,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/setSymbol", + "path": "/annotationEditor/splitTranscript", "response": { - "jsondocId": "ed44cc2c-cd03-4096-8135-ac763e9b154c", + "jsondocId": "309ac2d8-f083-4207-96cf-66106b2b339c", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2864,7 +2809,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "a516d9fc-bf9a-4280-b5de-7e055d1b52f2", + "jsondocId": "d9ad2864-789c-4e13-9cd0-07777160d13f", "name": "username", "format": "", "description": "", @@ -2873,7 +2818,7 @@ "allowedvalues": [] }, { - "jsondocId": "909b1b9f-b409-4730-8801-0e29dc10636c", + "jsondocId": "9c1ece88-8625-4922-b4c8-a7890f30d7a8", "name": "password", "format": "", "description": "", @@ -2882,7 +2827,7 @@ "allowedvalues": [] }, { - "jsondocId": "3ebd8439-c4ba-42f4-a296-8d49af72cd9b", + "jsondocId": "e1d30747-9e09-4e07-a673-e3cb6213b679", "name": "sequence", "format": "", "description": "(optional) Sequence name", @@ -2891,7 +2836,7 @@ "allowedvalues": [] }, { - "jsondocId": "7dc45d56-9ae0-4d83-9f63-a83bca06ca82", + "jsondocId": "68b7278b-8b36-467d-8133-55571c9a9152", "name": "organism", "format": "", "description": "(optional) Organism ID or common name", @@ -2900,21 +2845,21 @@ "allowedvalues": [] }, { - "jsondocId": "f63da8a7-de28-4ac8-a933-1b328e722d82", + "jsondocId": "c1b562e9-3a5a-47c4-a1af-2b95a06f5448", "name": "features", "format": "", - "description": "JSONArray of features objects to export defined by a unique name {'uniquename':'ABC123'}", + "description": "JSONArray with with two transcript objects referred to their unique names {'uniquename':'ABC123'}", "type": "JSONArray", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Get sequences for features", - "methodName": "getSequence", - "jsondocId": "7e2c97e7-e269-46e2-90d8-a60b03f95fa5", + "description": "Merge transcripts", + "methodName": "mergeTranscripts", + "jsondocId": "84932aa7-2cc7-4ede-a1bc-e1630e332e8c", "bodyobject": { - "jsondocId": "59ece693-f049-4a50-aefe-a4ee4904a43d", + "jsondocId": "945ac9ab-729e-4a53-8500-237c1968ea64", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2922,9 +2867,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getSequences", + "path": "/annotationEditor/mergeTranscripts", "response": { - "jsondocId": "0a4b5705-f098-46db-9888-f09e8d3835d3", + "jsondocId": "a87ff181-1bbd-481e-88e2-cf5945c74be7", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2937,7 +2882,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e60c3492-1b61-4508-90e5-b8189146388d", + "jsondocId": "5b87bcae-e5b2-4197-a4fe-7fd1cf4452a8", "name": "username", "format": "", "description": "", @@ -2946,7 +2891,7 @@ "allowedvalues": [] }, { - "jsondocId": "8f00c1cf-3d98-4138-8abd-3162a2c221cd", + "jsondocId": "d4b40a57-5309-4d21-a012-a6cdb33a42cb", "name": "password", "format": "", "description": "", @@ -2955,7 +2900,25 @@ "allowedvalues": [] }, { - "jsondocId": "feb49db0-218c-40e0-820a-4859fef69894", + "jsondocId": "8f860924-a85d-46ee-a865-2407ebe07437", + "name": "sequence", + "format": "", + "description": "(optional) Sequence name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "2f1c206f-e00f-441e-a374-08b366672b83", + "name": "organism", + "format": "", + "description": "(optional) Organism ID or common name", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "edefcd49-ce31-40c5-bc60-4b132cb0929f", "name": "features", "format": "", "description": "JSONArray of features objects to export defined by a unique name {'uniquename':'ABC123'}", @@ -2965,11 +2928,11 @@ } ], "verb": "POST", - "description": "Get gff3", - "methodName": "getGff3", - "jsondocId": "dddec2bf-01be-4144-a737-e97230531605", + "description": "Get sequences for features", + "methodName": "getSequence", + "jsondocId": "bfa4dc02-30f3-4fd4-a5db-bdb92b081af5", "bodyobject": { - "jsondocId": "e9562dbc-d8b3-4587-a70b-b07761d1200f", + "jsondocId": "6904e808-6eba-4bf7-b478-de7d18eb6ef3", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -2977,9 +2940,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/getGff3", + "path": "/annotationEditor/getSequences", "response": { - "jsondocId": "871b9a38-90f6-49d1-93b6-3d6366f7bc21", + "jsondocId": "5036f1e9-a161-4c23-b6da-65f6b543e267", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -2988,7 +2951,7 @@ "consumes": ["application/json"] }, { - "jsondocId": "49e87438-29f9-4e4b-8443-699b62fe9316", + "jsondocId": "37be86ba-adc4-4e18-a7c8-7d11ec0e6ef5", "bodyobject": null, "apierrors": [], "path": "/annotationEditor/getSequenceSearchTools", @@ -2996,7 +2959,7 @@ "pathparameters": [], "queryparameters": [], "response": { - "jsondocId": "fe705fc0-d0dd-400b-a0e8-a4fc179eab43", + "jsondocId": "33f4d868-4871-4bbb-8d89-d6f1709549ee", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -3011,7 +2974,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "38fa79e3-f194-432e-8f22-2cc8e826631a", + "jsondocId": "41af9349-6f1f-42ab-b26c-b6477e3153b5", "name": "username", "format": "", "description": "", @@ -3020,7 +2983,7 @@ "allowedvalues": [] }, { - "jsondocId": "e8c8f1a6-176c-4c45-846a-af4ebfde8fcf", + "jsondocId": "af021837-3127-4059-bf9e-fc0659c27550", "name": "password", "format": "", "description": "", @@ -3032,9 +2995,9 @@ "verb": "POST", "description": "Get canned comments", "methodName": "getCannedComments", - "jsondocId": "88f42656-c185-49a2-9775-0433c2dc3e57", + "jsondocId": "8f74f53d-5b35-4d27-9881-ca2acd244519", "bodyobject": { - "jsondocId": "77406769-b49d-479d-9084-df65e1b50d1e", + "jsondocId": "a4fc0f14-c024-4e4f-9047-a4edc55bc0b2", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3044,7 +3007,7 @@ "apierrors": [], "path": "/annotationEditor/getCannedComments", "response": { - "jsondocId": "bfa1ecd2-1e6a-4b0f-aa94-cb3339f34fa4", + "jsondocId": "d4921a3a-40d9-4446-903a-8bf31cda1e57", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -3057,7 +3020,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "f2d58177-6c23-48e1-9b74-f39d58670219", + "jsondocId": "e45421d8-aad9-4e25-8df3-f0d5d22d2f7b", "name": "username", "format": "", "description": "", @@ -3066,7 +3029,7 @@ "allowedvalues": [] }, { - "jsondocId": "cbfafa58-316a-48d1-853f-703c8893aa49", + "jsondocId": "8de8820b-3eea-40f7-8588-a4f4f65a0778", "name": "password", "format": "", "description": "", @@ -3075,7 +3038,7 @@ "allowedvalues": [] }, { - "jsondocId": "608cd856-036d-4ce5-b1d3-941960570fba", + "jsondocId": "e5569137-8254-4125-9ca6-02093cd29530", "name": "client_token", "format": "", "description": "Organism ID/Name or Client-generated ", @@ -3084,7 +3047,7 @@ "allowedvalues": [] }, { - "jsondocId": "3223648f-9531-4d9a-8e1f-de3da15b2358", + "jsondocId": "6a3a9f19-49ec-4c65-9841-913926d77f8d", "name": "search", "format": "", "description": "{'key':'blat','residues':'ATACTAGAGATAC':'database_id':'abc123'}", @@ -3096,9 +3059,9 @@ "verb": "POST", "description": "Search sequences", "methodName": "searchSequence", - "jsondocId": "ebad7814-1369-4e5b-bdf5-ecd87dc61eb3", + "jsondocId": "d6eb646d-ff31-4aef-bd19-af6e665340cc", "bodyobject": { - "jsondocId": "7e691f8b-f1c6-4fb9-8a9a-02fa57ce6376", + "jsondocId": "a8da393b-e140-4974-b70c-1c2a2b571de8", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3108,7 +3071,7 @@ "apierrors": [], "path": "/annotationEditor/searchSequences", "response": { - "jsondocId": "16cd720e-22fd-4ab0-ac73-86cd30ed4c7a", + "jsondocId": "8e1540ac-a4f5-41f7-9113-1fcb2e98bf3c", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -3121,7 +3084,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "349309eb-4aeb-4581-a1a4-de30cc8940e9", + "jsondocId": "48617c2f-5fb7-447e-b7d0-ed9153d17e4c", "name": "username", "format": "", "description": "", @@ -3130,7 +3093,7 @@ "allowedvalues": [] }, { - "jsondocId": "ef53232c-3bf0-4e67-ab4a-4219a36a0d15", + "jsondocId": "4bbc0799-48bb-4122-ad23-f6d60fdc27fa", "name": "password", "format": "", "description": "", @@ -3139,39 +3102,76 @@ "allowedvalues": [] }, { - "jsondocId": "0af61ead-278d-44eb-94bd-6598c6402466", - "name": "sequence", + "jsondocId": "3e12a137-1e22-40f0-8200-6350db6a09d7", + "name": "features", "format": "", - "description": "(optional) Sequence name", - "type": "string", + "description": "JSONArray of features objects to export defined by a unique name {'uniquename':'ABC123'}", + "type": "JSONArray", + "required": "true", + "allowedvalues": [] + } + ], + "verb": "POST", + "description": "Get gff3", + "methodName": "getGff3", + "jsondocId": "2e9abc36-87c8-4746-a620-8fb6efca8b32", + "bodyobject": { + "jsondocId": "5b3d0f96-25aa-4413-bef3-d54eda5a7511", + "mapValueObject": "", + "mapKeyObject": "", + "multiple": "Unknow", + "map": "", + "object": "annotation editor" + }, + "apierrors": [], + "path": "/annotationEditor/getGff3", + "response": { + "jsondocId": "08691d4f-08ce-420b-9f3d-b3460fd4a300", + "mapValueObject": "", + "mapKeyObject": "", + "object": "annotation editor" + }, + "produces": ["application/json"], + "consumes": ["application/json"] + }, + { + "headers": [], + "pathparameters": [], + "queryparameters": [ + { + "jsondocId": "9be55372-1fd2-462b-a6c6-d014dce2e16f", + "name": "username", + "format": "", + "description": "", + "type": "email", "required": "true", "allowedvalues": [] }, { - "jsondocId": "62f72692-3b16-4baf-9ba2-7a0439e166e5", - "name": "organism", + "jsondocId": "3ec9c782-e573-4924-924b-ac4dcb7e2b3c", + "name": "password", "format": "", - "description": "(optional) Organism ID or common name", - "type": "string", + "description": "", + "type": "password", "required": "true", "allowedvalues": [] }, { - "jsondocId": "8bf8f877-4d09-4174-990c-7e9807397327", - "name": "features", + "jsondocId": "18216059-0c6b-4691-9494-4562b282397e", + "name": "days", "format": "", - "description": "JSONArray containing JSON objects with {'uniquename':'ABCD-1234','non_reserved_properties':[{'tag':'clockwork','value':'orange'},{'tag':'color','value':'purple'}]}. Available status found here: /availableStatus/ ", - "type": "JSONArray", + "description": "Number of past days to retrieve annotations from.", + "type": "Integer", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Add attribute (key,value pair) to feature", - "methodName": "addAttribute", - "jsondocId": "46ad6614-52ee-46f8-9a71-cc0b049a2c84", + "description": "Get genes created or updated in the past, Returns JSON hash gene_name:organism", + "methodName": "getRecentAnnotations", + "jsondocId": "2b7c518d-caf3-46be-9e7b-bd46f5c17a5d", "bodyobject": { - "jsondocId": "384952c2-f54f-4c49-a4a7-eceed0760c32", + "jsondocId": "0935d747-f376-4ce8-8e4f-b93499b6ef56", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3179,9 +3179,9 @@ "object": "annotation editor" }, "apierrors": [], - "path": "/annotationEditor/addAttribute", + "path": "/annotationEditor/getRecentAnnotations", "response": { - "jsondocId": "04841e48-364f-40d0-9901-15103f4c1eef", + "jsondocId": "30981a09-972e-4392-bea8-51005fa27e5a", "mapValueObject": "", "mapKeyObject": "", "object": "annotation editor" @@ -3194,14 +3194,14 @@ "description": "Methods for running the annotation engine" }, { - "jsondocId": "68ca938b-8653-43dd-be1a-0f2cf9c09d4f", + "jsondocId": "ef047417-bdf0-4ac2-8db6-a5b6c49a01d8", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "53a300d5-c1ac-4702-b460-695e319eb4f6", + "jsondocId": "4835c6df-4333-4bca-88d2-96835ecf62ef", "name": "username", "format": "", "description": "", @@ -3210,7 +3210,7 @@ "allowedvalues": [] }, { - "jsondocId": "3e4dd52e-6fd7-4854-b488-a596300b9bb2", + "jsondocId": "bfea2fd5-4a1b-49db-a843-e1a8375e5ea4", "name": "password", "format": "", "description": "", @@ -3219,7 +3219,7 @@ "allowedvalues": [] }, { - "jsondocId": "0e3e5d71-ed76-4efd-8a5f-adce264b9418", + "jsondocId": "5cf0853d-3951-4eab-9289-3c9184627772", "name": "uniquename", "format": "", "description": "Uniquename (UUID) of the feature we are editing", @@ -3228,7 +3228,7 @@ "allowedvalues": [] }, { - "jsondocId": "0a143aa1-a2a3-4e99-8cd0-9037a3377420", + "jsondocId": "1bbb01c4-83e2-4a17-93e2-caf868cca688", "name": "name", "format": "", "description": "Updated feature name", @@ -3237,7 +3237,7 @@ "allowedvalues": [] }, { - "jsondocId": "f3df2687-90ff-4f68-96a2-4d74e3752a3d", + "jsondocId": "ca49fd44-9c5c-4599-99e3-69bb47735bae", "name": "symbol", "format": "", "description": "Updated feature symbol", @@ -3246,7 +3246,7 @@ "allowedvalues": [] }, { - "jsondocId": "30229512-9dc2-45ef-a67e-11efaa8fe9ec", + "jsondocId": "22fcdf2d-1186-4c2a-af26-6bf4d0666d55", "name": "description", "format": "", "description": "Updated feature description", @@ -3258,9 +3258,9 @@ "verb": "POST", "description": "Update shallow feature properties", "methodName": "updateFeature", - "jsondocId": "f0aed6e6-2afc-4355-99c1-b32dbc1db9b8", + "jsondocId": "c0144439-4e7d-4cf3-b554-8859e1a83716", "bodyobject": { - "jsondocId": "21238956-253c-4c0f-aadf-0475858f529b", + "jsondocId": "25e7c15b-eef6-463e-a8a5-e1147e751b83", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3270,7 +3270,7 @@ "apierrors": [], "path": "/annotator/updateFeature", "response": { - "jsondocId": "f9450c90-8f45-42a8-a519-00a5930603c5", + "jsondocId": "080da5dc-678a-41f7-9afa-f5dd995a1ee6", "mapValueObject": "", "mapKeyObject": "", "object": "annotator" @@ -3283,7 +3283,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "af376231-4551-4e89-a9be-621174ee2f47", + "jsondocId": "aa9a4de1-f9bb-444d-a0df-51e92e789bbf", "name": "username", "format": "", "description": "", @@ -3292,7 +3292,7 @@ "allowedvalues": [] }, { - "jsondocId": "18976075-49d3-4f2d-afd2-65a56320a75e", + "jsondocId": "0a1b6319-9667-4681-8b62-bc003a5e5582", "name": "password", "format": "", "description": "", @@ -3301,7 +3301,7 @@ "allowedvalues": [] }, { - "jsondocId": "7a8ac7de-2050-4d95-ae21-bc320c5e8866", + "jsondocId": "38a9738a-7904-462d-ae79-eb4cc8918b9f", "name": "uniquename", "format": "", "description": "Uniquename (UUID) of the exon we are editing", @@ -3310,7 +3310,7 @@ "allowedvalues": [] }, { - "jsondocId": "7686ed84-f83f-419a-b5dc-d9b75aac04e7", + "jsondocId": "1348bc47-7f04-4e1f-b22e-f1ba59ac42e2", "name": "fmin", "format": "", "description": "fmin for Exon Location", @@ -3319,7 +3319,7 @@ "allowedvalues": [] }, { - "jsondocId": "03913cc0-0eff-4b03-8628-f515c0ff079f", + "jsondocId": "bbf92dd8-f81b-4f74-8ea3-a74d3e4f69c3", "name": "fmax", "format": "", "description": "fmax for Exon Location", @@ -3328,7 +3328,7 @@ "allowedvalues": [] }, { - "jsondocId": "af0af79b-1ae7-47ab-8c28-8a5e7cd7577b", + "jsondocId": "b012074a-fe07-4c5b-aba3-4064fb248009", "name": "strand", "format": "", "description": "strand for Feature Location 1 or -1", @@ -3340,9 +3340,9 @@ "verb": "POST", "description": "Update exon boundaries", "methodName": "setExonBoundaries", - "jsondocId": "b49285b3-9756-4d66-9184-266fd986731e", + "jsondocId": "6bc5f79a-396f-480e-bc65-f0380dc7e07d", "bodyobject": { - "jsondocId": "83ffe5cb-6b6b-4f84-a4e2-3e7c02b413f0", + "jsondocId": "dad6b718-c94d-428a-9316-bd1b5d8a39b2", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3352,7 +3352,7 @@ "apierrors": [], "path": "/annotator/setExonBoundaries", "response": { - "jsondocId": "53744ed5-88d5-4e19-bc92-d2a7601450bc", + "jsondocId": "af89f991-d8e9-4146-9c6c-729af928fdb5", "mapValueObject": "", "mapKeyObject": "", "object": "annotator" @@ -3365,7 +3365,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "5da36205-d6d5-4cf3-8e46-67b674b8a794", + "jsondocId": "b5f2bfde-086d-472a-9332-1a370d7b6293", "name": "username", "format": "", "description": "", @@ -3374,7 +3374,7 @@ "allowedvalues": [] }, { - "jsondocId": "4c182823-9ab7-4b18-b867-0e687bc9e1a8", + "jsondocId": "5b5de5dc-53bc-48fe-a938-12264eee2ee2", "name": "password", "format": "", "description": "", @@ -3383,7 +3383,7 @@ "allowedvalues": [] }, { - "jsondocId": "ff22c3c2-1161-40cf-a0ec-dea039e7e65c", + "jsondocId": "933e1ff7-504f-49ca-9020-9ac513092506", "name": "id", "format": "", "description": "Group ID (or specify the name)", @@ -3392,7 +3392,7 @@ "allowedvalues": [] }, { - "jsondocId": "61d9de4a-093a-4a1c-b10b-79575ba1f28c", + "jsondocId": "2ce9d0cd-5edb-4277-98d0-82ed580ee9d2", "name": "name", "format": "", "description": "Group name", @@ -3404,9 +3404,9 @@ "verb": "POST", "description": "Get annotators report for group", "methodName": "getAnnotatorsReportForGroup", - "jsondocId": "2089062a-22aa-44da-8464-9d51a7926c20", + "jsondocId": "cfa45eaf-3714-45c7-97c2-f4788e24ce13", "bodyobject": { - "jsondocId": "bf1d528b-4a17-4c20-83ac-d3c94cbc21a9", + "jsondocId": "48b2ab99-ad77-471e-87df-540e3dffc604", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3416,7 +3416,7 @@ "apierrors": [], "path": "/group/getAnnotatorsReportForGroup", "response": { - "jsondocId": "a2e86d20-0794-41c5-8072-d251e4548f3d", + "jsondocId": "81835afb-39d4-42b9-8de6-8bf6c1db6fde", "mapValueObject": "", "mapKeyObject": "", "object": "annotator" @@ -3429,14 +3429,14 @@ "description": "Methods for running the annotation engine" }, { - "jsondocId": "6265f319-8c46-46ac-a10f-f7ebb51eedd0", + "jsondocId": "9b4ea7a5-251a-4a58-8e91-fcc813f6a149", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "b902f315-3919-4569-87b8-e25d8a2021b5", + "jsondocId": "7b86577e-c107-42bd-a000-8d3364dc6056", "name": "username", "format": "", "description": "", @@ -3445,7 +3445,7 @@ "allowedvalues": [] }, { - "jsondocId": "bae225b6-9cf7-468e-909c-4172ee3b1f4d", + "jsondocId": "0b414101-d398-42f7-b555-cbff72963e1f", "name": "password", "format": "", "description": "", @@ -3454,7 +3454,7 @@ "allowedvalues": [] }, { - "jsondocId": "e0b55dc4-f858-4c80-8543-6ef76c41f886", + "jsondocId": "20ac9737-7a55-4e97-9f03-aee4a69d5f3c", "name": "id", "format": "", "description": "Status ID to update (or specify the old_value)", @@ -3463,7 +3463,7 @@ "allowedvalues": [] }, { - "jsondocId": "cf4ed50b-e18c-4d7c-8b56-b44336871508", + "jsondocId": "4804f2c8-d8bf-4b56-844e-6ff20f67d175", "name": "old_value", "format": "", "description": "Status name to update", @@ -3472,7 +3472,7 @@ "allowedvalues": [] }, { - "jsondocId": "167c564c-0c1c-4fcc-856e-3ad4eb6114cf", + "jsondocId": "8943326b-7474-461a-8c1a-a2319d0f712a", "name": "new_value", "format": "", "description": "Status name to change to (the only editable option)", @@ -3484,9 +3484,9 @@ "verb": "POST", "description": "Update status", "methodName": "updateStatus", - "jsondocId": "a2d4682d-5852-42ab-815c-733e326010c6", + "jsondocId": "1dc03430-0ef5-4416-a825-fd6d5eec0991", "bodyobject": { - "jsondocId": "00be8150-d7d9-4be0-9a62-e4cdb7ad50b1", + "jsondocId": "8b3efd52-656d-4bc8-bcd2-ab542f68bd18", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3496,7 +3496,7 @@ "apierrors": [], "path": "/availableStatus/updateStatus", "response": { - "jsondocId": "22384546-49ee-4194-ad97-a216d4cadd4b", + "jsondocId": "bf184f3f-ecdb-4d48-ad9f-0ad8d1d8754a", "mapValueObject": "", "mapKeyObject": "", "object": "available status" @@ -3509,7 +3509,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "df4ee713-3b58-49d3-b1d2-f525e1e527f5", + "jsondocId": "054603fb-5fb0-4a8c-b116-dd373f0b91c0", "name": "username", "format": "", "description": "", @@ -3518,7 +3518,7 @@ "allowedvalues": [] }, { - "jsondocId": "167ca5b0-7b02-481a-b2d9-e905c3f6ffd5", + "jsondocId": "1d7139bd-f4bf-44f7-a77f-08b64ccdaffb", "name": "password", "format": "", "description": "", @@ -3527,7 +3527,7 @@ "allowedvalues": [] }, { - "jsondocId": "e8f9d715-d7b6-4610-bb85-f9c410f77433", + "jsondocId": "25449184-dfac-49f2-9aaa-c0c359ffc5e8", "name": "value", "format": "", "description": "Status name to add", @@ -3539,9 +3539,9 @@ "verb": "POST", "description": "Create status", "methodName": "createStatus", - "jsondocId": "6c444736-0ce5-441e-a630-31cd02100a66", + "jsondocId": "f18e68d4-7dc2-41a8-a3eb-a0780dcbaa49", "bodyobject": { - "jsondocId": "e406ad11-e572-4138-b740-d7c384429242", + "jsondocId": "5da90ded-59c4-49d3-82d2-c9a9bc86e733", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3551,7 +3551,7 @@ "apierrors": [], "path": "/availableStatus/createStatus", "response": { - "jsondocId": "70f6f7d7-5eed-4fe6-a5e6-8f3ac6afce76", + "jsondocId": "e9768b37-fe0b-416f-bcae-24780252e044", "mapValueObject": "", "mapKeyObject": "", "object": "available status" @@ -3564,7 +3564,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "9e1223b3-37b3-4ce2-a5ec-78cea6a8f56c", + "jsondocId": "e7ad0148-2b45-40f1-879e-ea53be45cbcd", "name": "username", "format": "", "description": "", @@ -3573,7 +3573,7 @@ "allowedvalues": [] }, { - "jsondocId": "36e2e482-3330-4052-8e35-3e5cd38af697", + "jsondocId": "438c08b5-af39-4b13-a794-09a2dcdecb39", "name": "password", "format": "", "description": "", @@ -3582,7 +3582,7 @@ "allowedvalues": [] }, { - "jsondocId": "14096ca3-7f2b-4a9b-83ae-947218b343ef", + "jsondocId": "0b958c52-9b9d-472b-aca7-bc72ce3e9d61", "name": "id", "format": "", "description": "Status ID to remove (or specify the name)", @@ -3591,7 +3591,7 @@ "allowedvalues": [] }, { - "jsondocId": "88af4ba6-5d59-4d71-9189-e4f8038b7c7b", + "jsondocId": "14106692-d42a-4b4b-96c4-47f956b93a41", "name": "value", "format": "", "description": "Status name to delete", @@ -3603,9 +3603,9 @@ "verb": "POST", "description": "Remove a status", "methodName": "deleteStatus", - "jsondocId": "222c4314-2b34-4789-9d2c-2fd4b90c0f88", + "jsondocId": "b3b04de1-8363-43e7-bea8-562226b48426", "bodyobject": { - "jsondocId": "4f7b8adb-5982-4a8c-abdc-55847d8729b7", + "jsondocId": "2dbe759b-f5e4-4057-84d0-8bf8cc4a240a", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3615,7 +3615,7 @@ "apierrors": [], "path": "/availableStatus/deleteStatus", "response": { - "jsondocId": "022025cb-cc94-40fb-a076-38f25e89c720", + "jsondocId": "6b230548-67da-4cd8-a03e-8f0514e8bb54", "mapValueObject": "", "mapKeyObject": "", "object": "available status" @@ -3628,7 +3628,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e9d33c24-9de1-4f9a-910e-3df216d600f7", + "jsondocId": "9453ada1-7649-498d-b29c-18866a7cf36a", "name": "username", "format": "", "description": "", @@ -3637,7 +3637,7 @@ "allowedvalues": [] }, { - "jsondocId": "d50d9416-013e-450f-9eb8-ae507216c2e0", + "jsondocId": "1f580c4c-1ab7-4369-8a25-90770f5f3c29", "name": "password", "format": "", "description": "", @@ -3646,7 +3646,7 @@ "allowedvalues": [] }, { - "jsondocId": "8044a949-c5cf-4b19-bf2d-01a0b1c96a04", + "jsondocId": "a502687f-d8f1-44d0-9e11-d48e3d5c9f0d", "name": "id", "format": "", "description": "Status ID to show (or specify a name)", @@ -3655,7 +3655,7 @@ "allowedvalues": [] }, { - "jsondocId": "ac9b80f2-df55-438e-aff5-d19bf622b664", + "jsondocId": "c50baa3e-49d9-46a5-a84b-5449e6757b3e", "name": "name", "format": "", "description": "Status name to show", @@ -3667,9 +3667,9 @@ "verb": "POST", "description": "Returns a JSON array of all statuses, or optionally, gets information about a specific status", "methodName": "showStatus", - "jsondocId": "86546683-387b-4ff6-8c8c-57b4bda914fb", + "jsondocId": "65244ca2-ec84-489e-a6ff-19a71105ec01", "bodyobject": { - "jsondocId": "2073b60b-3f78-4ba6-8356-719079ef3de1", + "jsondocId": "fac8f83c-0e2a-4018-bbbc-41380914ffa1", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3679,7 +3679,7 @@ "apierrors": [], "path": "/availableStatus/showStatus", "response": { - "jsondocId": "f6a64400-b835-472f-9f2d-f7b291357626", + "jsondocId": "d0bb956a-e671-46cc-8356-45dddecec8ff", "mapValueObject": "", "mapKeyObject": "", "object": "available status" @@ -3692,14 +3692,14 @@ "description": "Methods for managing available statuses" }, { - "jsondocId": "44ac42fe-1f99-4b38-a11b-718a16357bc4", + "jsondocId": "fd0b122d-93da-4dd9-b12f-bad941bc2fa5", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "da32bdda-58c6-47ac-a14a-fd5b01c2f39f", + "jsondocId": "2afef582-2fbe-494a-9b10-6103a178f5c0", "name": "username", "format": "", "description": "", @@ -3708,7 +3708,7 @@ "allowedvalues": [] }, { - "jsondocId": "d1c19f99-4149-4c93-bf56-68648f611649", + "jsondocId": "5da8257b-cc72-47db-b725-05e72a74935d", "name": "password", "format": "", "description": "", @@ -3717,16 +3717,34 @@ "allowedvalues": [] }, { - "jsondocId": "4ac14757-976c-4f41-a837-cbb3105df17e", - "name": "comment", + "jsondocId": "174f6ff9-f503-4da7-a8e3-1e106074a6f7", + "name": "id", "format": "", - "description": "Canned comment to add", + "description": "Canned comment ID to update (or specify the old_comment)", + "type": "long", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "2903b1d3-ac1c-4472-8675-8cbc1136bdbd", + "name": "old_comment", + "format": "", + "description": "Canned comment to update", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "6e029f3b-38ee-46a6-978c-4ef8c2f7a8a7", + "name": "new_comment", + "format": "", + "description": "Canned comment to change to (the only editable option)", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "f54fd3ce-1069-4dc9-9266-a8a47fdf0d2e", + "jsondocId": "cbfecc4d-bc1a-442b-9755-fcb1f1ca7ed7", "name": "metadata", "format": "", "description": "Optional additional information", @@ -3736,11 +3754,11 @@ } ], "verb": "POST", - "description": "Create canned comment", - "methodName": "createComment", - "jsondocId": "076b2552-ce04-4aa5-9900-427950387861", + "description": "Update canned comment", + "methodName": "updateComment", + "jsondocId": "8f87fe6e-ec7e-4970-9db3-6b50a8c39ec0", "bodyobject": { - "jsondocId": "b06f0dc4-a549-479a-ba53-b13618c76de1", + "jsondocId": "985a23ff-f5a3-47ef-9202-196780a20171", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3748,9 +3766,9 @@ "object": "canned comment" }, "apierrors": [], - "path": "/cannedComment/createComment", + "path": "/cannedComment/updateComment", "response": { - "jsondocId": "51249bf4-750b-40f9-91cb-0b52b214de47", + "jsondocId": "b94a5805-8c7f-4f1c-a167-d9fd14f7b389", "mapValueObject": "", "mapKeyObject": "", "object": "canned comment" @@ -3763,7 +3781,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "367a8117-7f43-4bee-b7c0-bd8262c168f7", + "jsondocId": "a06db499-0189-4f1d-a0c5-dabea4931576", "name": "username", "format": "", "description": "", @@ -3772,7 +3790,7 @@ "allowedvalues": [] }, { - "jsondocId": "0fa4bf73-9e4c-41b9-a0b2-351f38724020", + "jsondocId": "e4371615-7cbe-435e-81a6-b3d72969cfc8", "name": "password", "format": "", "description": "", @@ -3781,48 +3799,30 @@ "allowedvalues": [] }, { - "jsondocId": "e98c0ac7-f9c5-4f89-9d3b-dab343ed21b8", + "jsondocId": "eccb581a-46c8-46af-ae76-3c697ab41e44", "name": "id", "format": "", - "description": "Canned comment ID to update (or specify the old_comment)", + "description": "Canned comment ID to remove (or specify the name)", "type": "long", "required": "true", "allowedvalues": [] }, { - "jsondocId": "390c940e-8016-4300-b366-2b87d792077a", - "name": "old_comment", - "format": "", - "description": "Canned comment to update", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "63e5005e-b6fd-4be7-9e16-e08073bef686", - "name": "new_comment", - "format": "", - "description": "Canned comment to change to (the only editable option)", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "836b490d-1673-4d5a-bd8c-367351eb4da2", - "name": "metadata", + "jsondocId": "3af5b179-4c2b-424a-a8bf-325acd168b98", + "name": "comment", "format": "", - "description": "Optional additional information", + "description": "Canned comment to delete", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Update canned comment", - "methodName": "updateComment", - "jsondocId": "651e92ee-c000-4d80-86af-e635c7b2dfe1", + "description": "Remove a canned comment", + "methodName": "deleteComment", + "jsondocId": "6a4f91d9-63d3-4583-aeff-dab99e6e91cc", "bodyobject": { - "jsondocId": "204870db-e120-4b33-b1c1-a027a4971a7b", + "jsondocId": "f706e2a0-ed96-47c1-b26f-d8741da976b5", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3830,9 +3830,9 @@ "object": "canned comment" }, "apierrors": [], - "path": "/cannedComment/updateComment", + "path": "/cannedComment/deleteComment", "response": { - "jsondocId": "9be53546-770c-4a06-801b-a2cd86566106", + "jsondocId": "77580c07-d328-4ee8-99f5-3ab813aa0d24", "mapValueObject": "", "mapKeyObject": "", "object": "canned comment" @@ -3845,7 +3845,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "05346f45-2cd4-4389-a38f-5c7ef895b533", + "jsondocId": "11189792-2536-4fdd-803f-7bf0c2e0f9ce", "name": "username", "format": "", "description": "", @@ -3854,7 +3854,7 @@ "allowedvalues": [] }, { - "jsondocId": "60fbcfad-2e10-40d4-b98d-5088a8dbcab7", + "jsondocId": "187edee2-246a-41c2-bf71-b0da8b5c089c", "name": "password", "format": "", "description": "", @@ -3863,30 +3863,30 @@ "allowedvalues": [] }, { - "jsondocId": "66bdae85-402f-4200-b875-4e728b1f8ad0", + "jsondocId": "6b6aadb5-a9ba-41f8-af76-9d67fc0eac5d", "name": "id", "format": "", - "description": "Canned comment ID to remove (or specify the name)", + "description": "Comment ID to show (or specify a comment)", "type": "long", "required": "true", "allowedvalues": [] }, { - "jsondocId": "de5ecfaa-8aa6-41b0-b9d0-8b5a2d4ac9d9", + "jsondocId": "f8a00078-f238-4852-8cad-e97075e57306", "name": "comment", "format": "", - "description": "Canned comment to delete", + "description": "Comment to show", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Remove a canned comment", - "methodName": "deleteComment", - "jsondocId": "9424e19c-8aa7-49ef-8d99-ed0347c7e879", + "description": "Returns a JSON array of all canned comments, or optionally, gets information about a specific canned comment", + "methodName": "showComment", + "jsondocId": "390a9666-ccd0-411e-8c72-87e9f75b0d6f", "bodyobject": { - "jsondocId": "b7941279-1bd2-4a0a-8e84-1932d2478ff9", + "jsondocId": "11e11c76-1542-4f07-9520-ddd8bf747fb5", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3894,9 +3894,9 @@ "object": "canned comment" }, "apierrors": [], - "path": "/cannedComment/deleteComment", + "path": "/cannedComment/showComment", "response": { - "jsondocId": "60302d29-b667-4f86-af7e-953d93495448", + "jsondocId": "04b4642d-f8b2-4cc8-a91f-e6c7ae6a6fdb", "mapValueObject": "", "mapKeyObject": "", "object": "canned comment" @@ -3909,7 +3909,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "2927ef81-1168-4c5e-939a-fd5d05390c54", + "jsondocId": "9d298802-0f80-40a0-8ff6-96aae156e5ad", "name": "username", "format": "", "description": "", @@ -3918,7 +3918,7 @@ "allowedvalues": [] }, { - "jsondocId": "15ecfe78-785c-41e3-8b4a-b472a2be43c3", + "jsondocId": "5b9371d2-5277-4a98-b506-bef8b9979197", "name": "password", "format": "", "description": "", @@ -3927,30 +3927,30 @@ "allowedvalues": [] }, { - "jsondocId": "e0ab4a3e-dba7-4ce7-b7ee-19c5df334e69", - "name": "id", + "jsondocId": "e257ee12-0b5a-4034-b44e-e0688311f5e6", + "name": "comment", "format": "", - "description": "Comment ID to show (or specify a comment)", - "type": "long", + "description": "Canned comment to add", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "6c397380-0b5e-46c6-bea8-70802933e040", - "name": "comment", + "jsondocId": "98288299-606a-48df-b16c-d5d6415bc5e6", + "name": "metadata", "format": "", - "description": "Comment to show", + "description": "Optional additional information", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Returns a JSON array of all canned comments, or optionally, gets information about a specific canned comment", - "methodName": "showComment", - "jsondocId": "f7e8b9c1-7ccb-4f1a-94a1-7e818ba49a9b", + "description": "Create canned comment", + "methodName": "createComment", + "jsondocId": "cfb5f7ef-0484-46af-b20d-edf4d1f750a0", "bodyobject": { - "jsondocId": "c2c04143-ed3e-4da3-b249-52eca803266d", + "jsondocId": "05dbd494-dc7d-4a42-9d06-ebebcb7a1fc4", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -3958,9 +3958,9 @@ "object": "canned comment" }, "apierrors": [], - "path": "/cannedComment/showComment", + "path": "/cannedComment/createComment", "response": { - "jsondocId": "545f00ea-3b79-46c1-92bf-845c54c98f9b", + "jsondocId": "c765c731-ab2a-4ff7-acbe-17a5393a9be1", "mapValueObject": "", "mapKeyObject": "", "object": "canned comment" @@ -3973,14 +3973,14 @@ "description": "Methods for managing canned comments" }, { - "jsondocId": "498ecee5-2c25-402f-bd4c-19301aba4604", + "jsondocId": "c861b9e6-6db3-4b49-888c-6c9c68c1c90d", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "f077f116-f1f2-450c-a195-19b6240d6e09", + "jsondocId": "9ac043bc-afe1-4a44-84c4-0a6ea54ccd7c", "name": "username", "format": "", "description": "", @@ -3989,7 +3989,7 @@ "allowedvalues": [] }, { - "jsondocId": "ff643388-e96e-46a2-a32c-05e7ca8b9a8a", + "jsondocId": "ebec8e68-bde5-4ddd-9440-76ffe2012b00", "name": "password", "format": "", "description": "", @@ -3998,7 +3998,7 @@ "allowedvalues": [] }, { - "jsondocId": "9345f9e0-f8cf-44fe-a780-94457bee58a5", + "jsondocId": "7a0db499-199b-47a0-9b9c-7dca9c666c06", "name": "id", "format": "", "description": "Canned key ID to update (or specify the old_key)", @@ -4007,7 +4007,7 @@ "allowedvalues": [] }, { - "jsondocId": "71baebe0-bf2e-4ee3-8fca-af168b63e1ba", + "jsondocId": "5be9fa38-fb2f-49a6-999f-56a14e2dc6c0", "name": "old_key", "format": "", "description": "Canned key to update", @@ -4016,7 +4016,7 @@ "allowedvalues": [] }, { - "jsondocId": "5b58184e-ae15-4f55-8d34-65a4141e1114", + "jsondocId": "c3e1af57-1d76-4497-9ba0-5484f8550f5c", "name": "new_key", "format": "", "description": "Canned key to change to (the only editable option)", @@ -4025,7 +4025,7 @@ "allowedvalues": [] }, { - "jsondocId": "b9f6ec14-fa71-4fec-9330-29760c25ad12", + "jsondocId": "0b6a6fc8-508a-4742-b6c8-1ca35b83cd13", "name": "metadata", "format": "", "description": "Optional additional information", @@ -4037,9 +4037,9 @@ "verb": "POST", "description": "Update canned key", "methodName": "updateKey", - "jsondocId": "2ab79d78-edeb-401a-99a2-3e023980b1c6", + "jsondocId": "b47e7edf-98ce-46c8-8d88-499c2555f251", "bodyobject": { - "jsondocId": "a4a9f20c-28e0-46a1-845c-1153b4d73433", + "jsondocId": "5fa3569c-0fff-4274-b45b-18aa6a589b83", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4049,7 +4049,7 @@ "apierrors": [], "path": "/cannedKey/updateKey", "response": { - "jsondocId": "5e7f1d8a-27e7-4f84-a682-adafe3c1a8bd", + "jsondocId": "575dad1d-65f6-446c-adf7-35e8761309a3", "mapValueObject": "", "mapKeyObject": "", "object": "canned key" @@ -4062,7 +4062,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "21322cfa-f1c5-48df-9ff0-0e20044540ab", + "jsondocId": "969c6001-ea26-4f6e-9687-18c5f9b29c71", "name": "username", "format": "", "description": "", @@ -4071,7 +4071,7 @@ "allowedvalues": [] }, { - "jsondocId": "6f0880ce-9755-4c69-886d-26b9c8a582a9", + "jsondocId": "cb0c92c4-8d04-44a9-acab-8814ae436c24", "name": "password", "format": "", "description": "", @@ -4080,7 +4080,7 @@ "allowedvalues": [] }, { - "jsondocId": "1bbad247-489f-49c7-a597-0237ca23c3e1", + "jsondocId": "22d263f5-b286-483f-9663-9b092aa012e3", "name": "key", "format": "", "description": "Canned key to add", @@ -4089,7 +4089,7 @@ "allowedvalues": [] }, { - "jsondocId": "fa0c29d6-6a50-464e-b2eb-69a495fb3570", + "jsondocId": "0a92611f-7534-4631-81f0-6852b2585233", "name": "metadata", "format": "", "description": "Optional additional information", @@ -4101,9 +4101,9 @@ "verb": "POST", "description": "Create canned key", "methodName": "createKey", - "jsondocId": "c065af2e-16b9-4464-81f9-4f3796351cb4", + "jsondocId": "cd0d5861-d893-4e2b-8e6d-71dd00cf155f", "bodyobject": { - "jsondocId": "7b89bbd9-7745-49b6-98f1-d2f1239211f9", + "jsondocId": "35fdfe17-2c3f-4687-99fb-8ef6f05d82f2", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4113,7 +4113,7 @@ "apierrors": [], "path": "/cannedKey/createKey", "response": { - "jsondocId": "2416a332-547b-4a64-82a6-53212b5c03af", + "jsondocId": "d20e3a0b-fb72-46bb-bb80-d31f90d7397c", "mapValueObject": "", "mapKeyObject": "", "object": "canned key" @@ -4126,7 +4126,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "1bc81c73-e7dc-446d-9187-067bb5980989", + "jsondocId": "03603c41-a3fc-4522-a110-f04a934aba12", "name": "username", "format": "", "description": "", @@ -4135,7 +4135,7 @@ "allowedvalues": [] }, { - "jsondocId": "db3129cf-ab04-4b9a-992b-f7b5370e3d31", + "jsondocId": "dba6b456-a804-4732-bb2c-2cddd308725b", "name": "password", "format": "", "description": "", @@ -4144,7 +4144,7 @@ "allowedvalues": [] }, { - "jsondocId": "94cea3f8-b4ac-4dde-9562-72ac81ec5bc8", + "jsondocId": "5c1c3e63-b99b-423d-ae21-193c65ad0dc0", "name": "id", "format": "", "description": "Canned key ID to remove (or specify the name)", @@ -4153,7 +4153,7 @@ "allowedvalues": [] }, { - "jsondocId": "6ce285ae-00e0-47eb-b0cd-ba52bba7f430", + "jsondocId": "6d8c87d6-b70b-4e90-a207-ff702fde85b6", "name": "key", "format": "", "description": "Canned key to delete", @@ -4165,9 +4165,9 @@ "verb": "POST", "description": "Remove a canned key", "methodName": "deleteKey", - "jsondocId": "063e5139-5798-4c5b-ab86-ac83b398a8fe", + "jsondocId": "0b1a5bf5-f9b9-4eb3-882f-3fd82bdabd02", "bodyobject": { - "jsondocId": "a6068d42-3342-4ff3-8707-d507e5a0108d", + "jsondocId": "f6997fa9-c5e0-4093-9b9d-781b4fea641e", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4177,7 +4177,7 @@ "apierrors": [], "path": "/cannedKey/deleteKey", "response": { - "jsondocId": "f0d993bd-ab51-4fd5-b369-8aaeece4b572", + "jsondocId": "ddfc787b-6162-46e4-8b36-26b7877641b3", "mapValueObject": "", "mapKeyObject": "", "object": "canned key" @@ -4190,7 +4190,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "83d2a067-238e-4904-87a2-044070f8357d", + "jsondocId": "69d3a88a-a990-4ec5-8220-c05cdff73251", "name": "username", "format": "", "description": "", @@ -4199,7 +4199,7 @@ "allowedvalues": [] }, { - "jsondocId": "4dc71a31-3c6c-4e8f-add0-1a7f626bf2e9", + "jsondocId": "df482fc7-4c7b-40f5-a852-4a7a8e25da07", "name": "password", "format": "", "description": "", @@ -4208,7 +4208,7 @@ "allowedvalues": [] }, { - "jsondocId": "d66916cd-6c2d-44c9-b1a0-25ab8651b368", + "jsondocId": "af427977-1541-4005-8b8c-c55fc4567773", "name": "id", "format": "", "description": "Key ID to show (or specify a key)", @@ -4217,7 +4217,7 @@ "allowedvalues": [] }, { - "jsondocId": "65b906da-fed4-4c6e-99b6-c0a72cd1bc4a", + "jsondocId": "41fd6896-3aae-4687-83f1-14aec2cb0e9b", "name": "key", "format": "", "description": "Key to show", @@ -4229,9 +4229,9 @@ "verb": "POST", "description": "Returns a JSON array of all canned keys, or optionally, gets information about a specific canned key", "methodName": "showKey", - "jsondocId": "119522a1-4030-41f1-87eb-dd4b780cd5a0", + "jsondocId": "707ecf17-8818-4d57-976d-8b2bad11ac12", "bodyobject": { - "jsondocId": "c917c040-7882-4ead-86a4-3c44c65a46f8", + "jsondocId": "78ff1d99-7502-47e7-9d3a-dae6da970fcb", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4241,7 +4241,7 @@ "apierrors": [], "path": "/cannedKey/showKey", "response": { - "jsondocId": "e6fed475-f00f-45cd-98d3-41d262434327", + "jsondocId": "56457cb6-1bbb-4f46-8f36-6c056ab5041b", "mapValueObject": "", "mapKeyObject": "", "object": "canned key" @@ -4254,14 +4254,14 @@ "description": "Methods for managing canned keys" }, { - "jsondocId": "9e4b7f14-55a0-4900-83c0-a6d6ef7c2e8f", + "jsondocId": "b48d322a-579e-4d7a-bcbf-47aacc7538cc", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "b22a374d-8387-4448-b8d5-505e31be67cf", + "jsondocId": "77499ed7-5430-41ce-9e26-91a498666352", "name": "username", "format": "", "description": "", @@ -4270,7 +4270,7 @@ "allowedvalues": [] }, { - "jsondocId": "41a8a291-b43d-4543-95a2-74da6091a7ca", + "jsondocId": "b83d5a37-f966-4c77-af7e-83043f4e961d", "name": "password", "format": "", "description": "", @@ -4279,7 +4279,7 @@ "allowedvalues": [] }, { - "jsondocId": "d3bee00f-238a-499a-aab9-5668624ff3fe", + "jsondocId": "cec2bc82-e402-4d59-8acb-4a8a28023da0", "name": "id", "format": "", "description": "Canned value ID to update (or specify the old_value)", @@ -4288,7 +4288,7 @@ "allowedvalues": [] }, { - "jsondocId": "55955bd0-531a-4ecf-aef5-882033278b51", + "jsondocId": "8a58dfd4-511f-4abb-8883-6d875048da71", "name": "old_value", "format": "", "description": "Canned value to update", @@ -4297,7 +4297,7 @@ "allowedvalues": [] }, { - "jsondocId": "c497ff1f-9471-4768-be71-b922b730743a", + "jsondocId": "ca94ed68-69ea-45ee-a5b5-7f575ea73e03", "name": "new_value", "format": "", "description": "Canned value to change to (the only editable option)", @@ -4306,7 +4306,7 @@ "allowedvalues": [] }, { - "jsondocId": "c90289e6-0691-4fea-83c0-e3c9dcd90b76", + "jsondocId": "f98e7fb1-a2d2-4d18-991f-e76f87d52644", "name": "metadata", "format": "", "description": "Optional additional information", @@ -4318,9 +4318,9 @@ "verb": "POST", "description": "Update canned value", "methodName": "updateValue", - "jsondocId": "bc3dd249-4eac-4016-a16b-a09f6d1207c1", + "jsondocId": "6a9fbf34-eb52-4df6-8b60-524c780c4210", "bodyobject": { - "jsondocId": "01c421ff-b697-4690-b580-5331a43846d7", + "jsondocId": "a96a6b59-e6b7-4aca-bbf3-23e7ad6f7dcf", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4330,7 +4330,7 @@ "apierrors": [], "path": "/cannedValue/updateValue", "response": { - "jsondocId": "4f56a326-df79-4b3a-ae65-474b389a7ecb", + "jsondocId": "4e6bc48e-9b13-4612-819f-225eada64779", "mapValueObject": "", "mapKeyObject": "", "object": "canned value" @@ -4343,7 +4343,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e4e01bbc-dfec-42dc-bf2c-6fcc96bd833b", + "jsondocId": "d812616d-d01a-4004-9c8f-a4d070de7ecf", "name": "username", "format": "", "description": "", @@ -4352,7 +4352,7 @@ "allowedvalues": [] }, { - "jsondocId": "7c3465c3-8ef6-460f-8994-7ecdb5765cdc", + "jsondocId": "b9083ab1-fbb7-4c81-bdf9-27f58546057b", "name": "password", "format": "", "description": "", @@ -4361,7 +4361,7 @@ "allowedvalues": [] }, { - "jsondocId": "63dc3731-338c-4c5c-84d9-90888ec41df7", + "jsondocId": "ec120a0d-e522-45af-b2e3-78e10fe1fd90", "name": "value", "format": "", "description": "Canned value to add", @@ -4370,7 +4370,7 @@ "allowedvalues": [] }, { - "jsondocId": "ad7a4e3e-6f1b-47ae-9b3f-b16e49460e6a", + "jsondocId": "7324444b-3ba7-4d16-ab7c-2ea102852c8e", "name": "metadata", "format": "", "description": "Optional additional information", @@ -4382,9 +4382,9 @@ "verb": "POST", "description": "Create canned value", "methodName": "createValue", - "jsondocId": "045cdd7a-ff2d-449b-b960-46d9800d1a6b", + "jsondocId": "fddf6c12-f2a0-426e-bc16-af3ef1037a8e", "bodyobject": { - "jsondocId": "b1665c21-49fe-45cd-8669-9231fa7d4b48", + "jsondocId": "ee40e97f-3a1f-4fff-a6a9-99bb97508e1d", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4394,7 +4394,7 @@ "apierrors": [], "path": "/cannedValue/createValue", "response": { - "jsondocId": "812a3d7a-1e73-4e10-8c6f-16a56392a0df", + "jsondocId": "38233034-03ba-4d45-add3-b4f8acbd47c2", "mapValueObject": "", "mapKeyObject": "", "object": "canned value" @@ -4407,7 +4407,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "5eaedb7b-a6f8-41ae-a7e2-0ec9d8f768a8", + "jsondocId": "32c7348b-951a-410a-8cd6-b8441f2dfe98", "name": "username", "format": "", "description": "", @@ -4416,7 +4416,7 @@ "allowedvalues": [] }, { - "jsondocId": "9c1492d6-a8cd-477b-a4ae-4c40315261a6", + "jsondocId": "a488a78a-c759-407b-9e64-b0d29a751b59", "name": "password", "format": "", "description": "", @@ -4425,7 +4425,7 @@ "allowedvalues": [] }, { - "jsondocId": "fefd3f35-db66-48a8-b24f-ee540f2b029b", + "jsondocId": "0a269bf5-5f99-4f39-9864-a8e376c35978", "name": "id", "format": "", "description": "Canned value ID to remove (or specify the name)", @@ -4434,7 +4434,7 @@ "allowedvalues": [] }, { - "jsondocId": "b4e50efa-c16e-40eb-b062-95dd0cd5f778", + "jsondocId": "016180ea-92cb-4491-a886-f40ea38dd89d", "name": "value", "format": "", "description": "Canned value to delete", @@ -4446,9 +4446,9 @@ "verb": "POST", "description": "Remove a canned value", "methodName": "deleteValue", - "jsondocId": "5f6cb2a8-15a8-415d-b66d-e1d6fecb6669", + "jsondocId": "c13b6ca6-c32d-4f32-b7de-74cf539b2ea9", "bodyobject": { - "jsondocId": "7f2ca9f6-c433-498d-b31b-c2294b6c5636", + "jsondocId": "90cd282d-2ed7-4705-bd7d-619cc7cbd41b", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4458,7 +4458,7 @@ "apierrors": [], "path": "/cannedValue/deleteValue", "response": { - "jsondocId": "ae000fd1-3047-4f73-ac86-5e7037ddfa87", + "jsondocId": "d39e4b07-ea8f-46ec-b722-254a4bbbd035", "mapValueObject": "", "mapKeyObject": "", "object": "canned value" @@ -4471,7 +4471,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "6255cae7-94db-4295-9c75-096d90459121", + "jsondocId": "4cdc47c8-8012-497a-bf3b-47a4db9d6cd1", "name": "username", "format": "", "description": "", @@ -4480,7 +4480,7 @@ "allowedvalues": [] }, { - "jsondocId": "84db095d-1106-4544-a123-6437bd7a14c6", + "jsondocId": "4cac749d-104e-4c8d-a2ad-659259d1d035", "name": "password", "format": "", "description": "", @@ -4489,7 +4489,7 @@ "allowedvalues": [] }, { - "jsondocId": "0a566e0f-2e20-4660-ad17-31518f29edfb", + "jsondocId": "ed5c43d7-3f8b-4a02-8f1d-26ec4569a686", "name": "id", "format": "", "description": "Value ID to show (or specify a value)", @@ -4498,7 +4498,7 @@ "allowedvalues": [] }, { - "jsondocId": "8b43f805-2c43-4fd7-b686-9a153da4ca07", + "jsondocId": "040fdd59-6f71-41a4-849b-ec7663e40441", "name": "value", "format": "", "description": "Value to show", @@ -4510,9 +4510,9 @@ "verb": "POST", "description": "Returns a JSON array of all canned values, or optionally, gets information about a specific canned value", "methodName": "showValue", - "jsondocId": "16cb5ae5-7581-4362-9d76-c5e57ce1096d", + "jsondocId": "1c9c013e-11aa-466c-9aca-738dd11b1ae6", "bodyobject": { - "jsondocId": "644ed197-e939-4615-867d-8f10f367747b", + "jsondocId": "b3fa3b5f-8032-4d10-88d3-4b9738175a28", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4522,7 +4522,7 @@ "apierrors": [], "path": "/cannedValue/showValue", "response": { - "jsondocId": "917bfe8b-ae65-41dd-aa1f-f3c0b36201a2", + "jsondocId": "de789b30-6329-47f4-8c84-cde1ffc3efa5", "mapValueObject": "", "mapKeyObject": "", "object": "canned value" @@ -4535,14 +4535,14 @@ "description": "Methods for managing canned values" }, { - "jsondocId": "4527f30a-7a41-4e74-b568-ace47d5b0d70", + "jsondocId": "b20153e3-2f07-4e84-b39e-3df47f3874e3", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "65e0e69f-f187-491f-a836-465726dfff3c", + "jsondocId": "435b7725-5706-4adc-9506-6488bd630ca2", "name": "username", "format": "", "description": "", @@ -4551,7 +4551,7 @@ "allowedvalues": [] }, { - "jsondocId": "e7f6208a-f69d-4010-92aa-b0c8509e0835", + "jsondocId": "a09761c4-8cb8-4b47-acc6-216558b8af79", "name": "password", "format": "", "description": "", @@ -4560,7 +4560,7 @@ "allowedvalues": [] }, { - "jsondocId": "db318d83-e0df-4017-ac69-d9422806a3e5", + "jsondocId": "5a52f3ab-380e-4c66-b7ed-7628292cfc13", "name": "name", "format": "", "description": "Group name to add, or a comma-delimited list of names", @@ -4572,9 +4572,9 @@ "verb": "POST", "description": "Create group", "methodName": "createGroup", - "jsondocId": "db02ce5d-7034-4aa2-9143-fdf088da5625", + "jsondocId": "7ec00a3d-f503-45f6-900f-80da9ba07234", "bodyobject": { - "jsondocId": "9a6e332f-080f-4759-a7a7-99d0c96d85c7", + "jsondocId": "b2a786a1-078d-4a42-a451-e4159cfc2cd0", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4584,7 +4584,7 @@ "apierrors": [], "path": "/group/createGroup", "response": { - "jsondocId": "191276f1-17e2-4761-b9b1-1541067c8b80", + "jsondocId": "5b66ccea-edad-47b9-b8f6-78326437e149", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4597,7 +4597,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "c44c7af7-2bde-4c4b-8d4d-5d598158f4d6", + "jsondocId": "ab9a1c86-9b38-4eab-abc1-cfc6a485ff0a", "name": "username", "format": "", "description": "", @@ -4606,7 +4606,7 @@ "allowedvalues": [] }, { - "jsondocId": "249c44ed-906f-4b78-9b84-d78f6c1cad18", + "jsondocId": "d528c850-4c66-4346-bc0d-a0340495ab8c", "name": "password", "format": "", "description": "", @@ -4615,21 +4615,30 @@ "allowedvalues": [] }, { - "jsondocId": "6f326a2d-698d-49a6-bd94-e6297603fea7", - "name": "groupId", + "jsondocId": "1e636d6a-e348-45af-aa6d-470540c42f3b", + "name": "id", "format": "", - "description": "Optional only load a specific groupId", + "description": "Group ID (or specify the name)", "type": "long", "required": "true", "allowedvalues": [] + }, + { + "jsondocId": "c4f3a0e7-575a-4e48-a76e-fb5846022a41", + "name": "name", + "format": "", + "description": "Group name", + "type": "string", + "required": "true", + "allowedvalues": [] } ], "verb": "POST", - "description": "Load all groups", - "methodName": "loadGroups", - "jsondocId": "4f30e608-dae0-484a-a165-78e16a2b62bb", + "description": "Get organism permissions for group", + "methodName": "getOrganismPermissionsForGroup", + "jsondocId": "f8aad5cb-70c3-4c1d-bd19-2a25cabccdc7", "bodyobject": { - "jsondocId": "32f9c24b-61bb-4759-80d9-c881db24760d", + "jsondocId": "324659ce-3c2f-44b3-919a-468ae5c774eb", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4637,9 +4646,9 @@ "object": "group" }, "apierrors": [], - "path": "/group/loadGroups", + "path": "/group/getOrganismPermissionsForGroup", "response": { - "jsondocId": "499e0022-3bae-49ef-8293-45b5974694c4", + "jsondocId": "59eecaac-dfb1-4f2b-8893-3a65b9640cc2", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4652,7 +4661,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "eb12a00a-2231-44ea-b86f-8e58d9615e8e", + "jsondocId": "d9546911-a512-4230-9d45-08020cf3b4ca", "name": "username", "format": "", "description": "", @@ -4661,7 +4670,7 @@ "allowedvalues": [] }, { - "jsondocId": "96cfe56f-5094-4e13-8fe4-d8c4786842a0", + "jsondocId": "df0e3ac8-bee3-4937-a8a9-f7a6f695c618", "name": "password", "format": "", "description": "", @@ -4670,30 +4679,21 @@ "allowedvalues": [] }, { - "jsondocId": "bdc54f60-b75b-4681-b2b6-8cec6aa746d0", - "name": "id", + "jsondocId": "4532604d-b15f-4731-9b1c-a97a99ce0df0", + "name": "groupId", "format": "", - "description": "Group ID (or specify the name)", + "description": "Optional only load a specific groupId", "type": "long", "required": "true", "allowedvalues": [] - }, - { - "jsondocId": "20c5f7e7-d961-49da-a330-543fa9977ef3", - "name": "name", - "format": "", - "description": "Group name", - "type": "string", - "required": "true", - "allowedvalues": [] } ], "verb": "POST", - "description": "Get organism permissions for group", - "methodName": "getOrganismPermissionsForGroup", - "jsondocId": "16174bb0-889a-4d34-88fb-3a0c51817da6", + "description": "Load all groups", + "methodName": "loadGroups", + "jsondocId": "1268a950-09d5-4fd7-8e95-17d85788746b", "bodyobject": { - "jsondocId": "b7aeabd3-16e3-401b-a0ec-6fd4e090b49b", + "jsondocId": "ce7e9358-b7f9-4657-bd65-82e0c635c8e4", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4701,9 +4701,9 @@ "object": "group" }, "apierrors": [], - "path": "/group/getOrganismPermissionsForGroup", + "path": "/group/loadGroups", "response": { - "jsondocId": "266dc7e8-cf75-4a14-b81f-1f9be6c17dbc", + "jsondocId": "52d18375-1d67-44ae-a0f0-5094d424204f", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4716,7 +4716,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "b4f65d35-e857-4e46-ba81-533cc5bbff8f", + "jsondocId": "f2095717-5c37-45aa-a77c-6fe8238772c8", "name": "username", "format": "", "description": "", @@ -4725,7 +4725,7 @@ "allowedvalues": [] }, { - "jsondocId": "1a61dbc1-8d46-45b3-93dd-d304800acc49", + "jsondocId": "68ed23c2-8b61-4329-af2f-3bacdd4ddd75", "name": "password", "format": "", "description": "", @@ -4734,7 +4734,7 @@ "allowedvalues": [] }, { - "jsondocId": "96075260-5bfd-4c72-a01a-df1f2c09b656", + "jsondocId": "2a7e0e62-5d4d-4995-bbf6-31ef7d309105", "name": "id", "format": "", "description": "Group ID to remove (or specify the name)", @@ -4743,7 +4743,7 @@ "allowedvalues": [] }, { - "jsondocId": "1a81a1a4-4136-48b6-a5c1-20b807f03993", + "jsondocId": "899e42cd-fc57-4a2c-aa77-6a4bb821b8de", "name": "name", "format": "", "description": "Group name or comma-delimited list of names to remove", @@ -4755,9 +4755,9 @@ "verb": "POST", "description": "Delete a group", "methodName": "deleteGroup", - "jsondocId": "152a7487-d726-4272-b61e-dde774ab6138", + "jsondocId": "8213aefe-af88-4257-8315-a841dfa673e5", "bodyobject": { - "jsondocId": "c539636f-30ce-4da7-acb8-1b028d2b72c2", + "jsondocId": "84689021-2dd8-4b44-901b-57412074e852", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4767,7 +4767,7 @@ "apierrors": [], "path": "/group/deleteGroup", "response": { - "jsondocId": "ae88f3a6-7a14-4ad4-8906-b1aa4a2b09a7", + "jsondocId": "cee959bf-e85a-4fcf-a521-256fdd3aee92", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4780,7 +4780,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "aaac04b8-07c6-41ca-8e2b-fed47139a08a", + "jsondocId": "f348c284-8d83-4285-8138-884dfaeab335", "name": "username", "format": "", "description": "", @@ -4789,7 +4789,7 @@ "allowedvalues": [] }, { - "jsondocId": "315bbb05-33a8-4e4c-82f4-cc4a144e77ce", + "jsondocId": "91151906-bb9f-4c49-8b57-f945a48589c3", "name": "password", "format": "", "description": "", @@ -4798,7 +4798,7 @@ "allowedvalues": [] }, { - "jsondocId": "d24def13-0a21-4890-952d-5d4106e6c3c4", + "jsondocId": "2ef97463-a9a9-42cb-84b9-b3fc10ed9f3a", "name": "id", "format": "", "description": "Group ID to update", @@ -4807,7 +4807,7 @@ "allowedvalues": [] }, { - "jsondocId": "26433dae-cbc5-4ce6-a3f0-e5048fdfda76", + "jsondocId": "39b2fb0c-c473-4265-9348-4120b6e57ee6", "name": "name", "format": "", "description": "Group name to change to (the only editable optoin)", @@ -4819,9 +4819,9 @@ "verb": "POST", "description": "Update group", "methodName": "updateGroup", - "jsondocId": "6b27fa9c-0c34-48d5-b0da-99a440bd2d28", + "jsondocId": "9617df63-4743-4029-a097-4c6612e40636", "bodyobject": { - "jsondocId": "1b947485-1ed2-4a3f-8ef4-cfa60a1760f1", + "jsondocId": "ee798e03-01b3-40b3-84a4-038a9bd6f818", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4831,7 +4831,7 @@ "apierrors": [], "path": "/group/updateGroup", "response": { - "jsondocId": "faf8e5f2-abd8-4602-9871-b8e1162fc5bf", + "jsondocId": "36bb9774-d8a8-435c-bd01-732b431b10db", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4844,7 +4844,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "c754e655-7e19-4a0d-82e1-bb7368e67bda", + "jsondocId": "94fe01fa-cd09-4b21-b811-3b96544c17b5", "name": "username", "format": "", "description": "", @@ -4853,7 +4853,7 @@ "allowedvalues": [] }, { - "jsondocId": "a8105f24-1a86-40e5-9423-44ba8c3e32c8", + "jsondocId": "7397260b-91ed-410a-8d61-2737a34a9918", "name": "password", "format": "", "description": "", @@ -4862,7 +4862,7 @@ "allowedvalues": [] }, { - "jsondocId": "3be4180e-19cc-4a94-b205-b7070e133d91", + "jsondocId": "55eac13f-3c7b-41fa-ba82-236f175a4e5e", "name": "groupId", "format": "", "description": "Group ID to modify permissions for (must provide this or 'name')", @@ -4871,7 +4871,7 @@ "allowedvalues": [] }, { - "jsondocId": "f4d3a769-721d-482b-8391-805fda53bb6a", + "jsondocId": "8a05e8ac-4795-4698-a1f1-ceebf050422f", "name": "name", "format": "", "description": "Group name to modify permissions for (must provide this or 'groupId')", @@ -4880,7 +4880,7 @@ "allowedvalues": [] }, { - "jsondocId": "a71bd661-4d74-4fe2-bbb4-e608c1992e91", + "jsondocId": "7daa4e35-eaba-4737-9be6-8ce752249d60", "name": "organism", "format": "", "description": "Organism common name", @@ -4889,7 +4889,7 @@ "allowedvalues": [] }, { - "jsondocId": "72338a27-f758-4543-a587-9732947ee4d4", + "jsondocId": "b4af0834-e67d-4043-afb7-bcef690fe8a3", "name": "ADMINISTRATE", "format": "", "description": "Indicate if user has administrative and all lesser (including user/group) privileges for the organism", @@ -4898,7 +4898,7 @@ "allowedvalues": [] }, { - "jsondocId": "c930e6ef-954a-4764-8da7-c57e28467860", + "jsondocId": "6e3c868d-11fc-47f1-a64c-96853b61b5ff", "name": "WRITE", "format": "", "description": "Indicate if user has write and all lesser privileges for the organism", @@ -4907,7 +4907,7 @@ "allowedvalues": [] }, { - "jsondocId": "def42b65-d045-41a7-8dd4-ea264b73c85c", + "jsondocId": "81c4a742-ec97-4027-8bf3-b50acfd65ab2", "name": "EXPORT", "format": "", "description": "Indicate if user has export and all lesser privileges for the organism", @@ -4916,7 +4916,7 @@ "allowedvalues": [] }, { - "jsondocId": "6a878d0b-88f2-4dd6-b6cd-384871bf4417", + "jsondocId": "144b43d5-e6cd-432d-9420-9c1170b43cba", "name": "READ", "format": "", "description": "Indicate if user has read and all lesser privileges for the organism", @@ -4928,9 +4928,9 @@ "verb": "POST", "description": "Update organism permission", "methodName": "updateOrganismPermission", - "jsondocId": "a1b4dc5d-c97b-40ec-9147-f804f9911434", + "jsondocId": "87185aef-4ba5-4778-9499-1c1a92a38b41", "bodyobject": { - "jsondocId": "05bf3736-0916-457e-ab49-dee43e6a51fb", + "jsondocId": "e62f68a1-f94e-4de4-a2b6-91cfb775d006", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -4940,7 +4940,7 @@ "apierrors": [], "path": "/group/updateOrganismPermission", "response": { - "jsondocId": "8ea63d2c-4cd5-46e8-920a-2fe383157822", + "jsondocId": "d46e4524-1d70-4b4d-a592-a9c0040256ce", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -4953,7 +4953,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "6efa1192-3b88-4666-9e7f-aae6a4e8f1de", + "jsondocId": "c0a83add-7940-493e-8751-46420522a825", "name": "username", "format": "", "description": "", @@ -4962,7 +4962,7 @@ "allowedvalues": [] }, { - "jsondocId": "7146f9a4-66f0-4223-a60f-6918120691d4", + "jsondocId": "c70849a6-e89f-4eae-9e9c-4132886a4e4d", "name": "password", "format": "", "description": "", @@ -4971,7 +4971,7 @@ "allowedvalues": [] }, { - "jsondocId": "1c21ff66-aba2-483f-bd7a-4a57ae3faf11", + "jsondocId": "c2965099-9ccb-48d4-a158-67f08e086860", "name": "groupId", "format": "", "description": "Group ID to alter membership of", @@ -4980,7 +4980,7 @@ "allowedvalues": [] }, { - "jsondocId": "9f9d50d0-aeaf-4c36-a00a-263ce948ed79", + "jsondocId": "7fc04df2-2532-42ba-baea-1f6c77cba228", "name": "users", "format": "", "description": "A JSON array of strings of emails of users the now belong to the group", @@ -4989,7 +4989,7 @@ "allowedvalues": [] }, { - "jsondocId": "6b687aaf-168f-482d-af7b-28c3ef85862c", + "jsondocId": "2c26da04-39c6-42ff-914d-fab5dd8100c1", "name": "memberships", "format": "", "description": "Bulk memberships (instead of users and groupId) to update of the form: [ {groupId: ,users: [\"user1\", \"user2\", \"user3\"]}, {groupId:, users: [\"user2\", \"user8\"]}]", @@ -5001,9 +5001,9 @@ "verb": "POST", "description": "Update group membership", "methodName": "updateMembership", - "jsondocId": "9b823fbc-e7e2-420b-a7d7-fa00e22dca28", + "jsondocId": "2f75e5d5-6846-4f21-8695-a95ba55df37b", "bodyobject": { - "jsondocId": "d5168ca6-3e5c-4829-a466-022cee044ba4", + "jsondocId": "d9f31f5f-bd64-4961-b7d0-a345e3f3d43f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5013,7 +5013,7 @@ "apierrors": [], "path": "/group/updateMembership", "response": { - "jsondocId": "5fda825d-75b6-450f-851b-15ec771cc7be", + "jsondocId": "80a80a83-6ba0-40c2-88d5-89b9f3fcdc0c", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -5026,7 +5026,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "239898a8-3382-44b5-854f-379baa27d1ae", + "jsondocId": "a96c9f90-4f77-4467-a7a5-ad0ac34ff21e", "name": "username", "format": "", "description": "", @@ -5035,7 +5035,7 @@ "allowedvalues": [] }, { - "jsondocId": "3525efab-e329-44eb-b78c-59112ecf387e", + "jsondocId": "f0458aab-f1e1-4b0a-98f7-5e5c26df569c", "name": "password", "format": "", "description": "", @@ -5044,7 +5044,7 @@ "allowedvalues": [] }, { - "jsondocId": "cae6dba4-07d0-47b1-9db8-288885f6b32a", + "jsondocId": "bf97d551-6a84-4892-ac85-f7715d74fff1", "name": "groupId", "format": "", "description": "Group ID to alter membership of", @@ -5053,7 +5053,7 @@ "allowedvalues": [] }, { - "jsondocId": "ca4741f9-7e89-4a0b-be4b-f5b110a38e70", + "jsondocId": "f51e814e-a4e5-4295-a137-f4cec9e5f3d9", "name": "users", "format": "", "description": "A JSON array of strings of emails of users the now belong to the group", @@ -5065,9 +5065,9 @@ "verb": "POST", "description": "Update group admin", "methodName": "updateGroupAdmin", - "jsondocId": "812a3dc0-9c5d-49ce-bcd8-d616ab8fa8c7", + "jsondocId": "6bfe0620-995a-42ae-8fa9-ef19db8b2d53", "bodyobject": { - "jsondocId": "b5fdb89c-ccdf-45b2-b110-aaf7db22eca5", + "jsondocId": "b091008d-8f43-4784-bde0-90a2f0301776", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5077,7 +5077,7 @@ "apierrors": [], "path": "/group/updateGroupAdmin", "response": { - "jsondocId": "214500cb-120a-49f6-bf25-cd25470785a1", + "jsondocId": "02c9cff3-8ea7-4114-919a-4896e7b94f91", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -5090,7 +5090,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "df69b170-b42b-4237-b9d2-5c81d0dd869a", + "jsondocId": "8c2f305f-5631-4051-b1b9-904bb4877869", "name": "username", "format": "", "description": "", @@ -5099,7 +5099,7 @@ "allowedvalues": [] }, { - "jsondocId": "89f26521-ecd0-4e03-bd4a-a389ed419e40", + "jsondocId": "bb9db6e2-4586-4db0-be9e-bab01eb43d49", "name": "password", "format": "", "description": "", @@ -5108,7 +5108,7 @@ "allowedvalues": [] }, { - "jsondocId": "a049643b-6553-4393-9b77-94ed2a5475b1", + "jsondocId": "27117742-cc64-4e06-a3cc-c9fa4786bf20", "name": "name", "format": "", "description": "Group name", @@ -5120,9 +5120,9 @@ "verb": "POST", "description": "Get group admins, returns group admins as JSONArray", "methodName": "getGroupAdmin", - "jsondocId": "bb6b6afb-e397-46b4-b594-6735215ea4eb", + "jsondocId": "5b1a92e8-7433-4d07-8cf6-3dde2ccb5bd8", "bodyobject": { - "jsondocId": "6acb36e7-f360-4c4d-a746-507796ef873c", + "jsondocId": "a9f000cd-9071-4678-a063-b9b42328bd8c", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5132,7 +5132,7 @@ "apierrors": [], "path": "/group/getGroupAdmin", "response": { - "jsondocId": "96286a2d-bca4-4917-b08a-5ad2bbbbe716", + "jsondocId": "5d04e43f-dba3-4db9-80b0-c81e61aa73c6", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -5145,7 +5145,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "9f9ebf63-a9a1-4b82-8a40-1e93b98797f4", + "jsondocId": "5c809c8d-3512-4b5c-a072-435029d0ca40", "name": "username", "format": "", "description": "", @@ -5154,7 +5154,7 @@ "allowedvalues": [] }, { - "jsondocId": "5b8b2890-a146-4e8e-86db-4e51a93abcda", + "jsondocId": "5a45187e-c463-40a1-8c05-916b2080f732", "name": "password", "format": "", "description": "", @@ -5163,7 +5163,7 @@ "allowedvalues": [] }, { - "jsondocId": "7bf54959-9553-4ca0-9192-d9270a2e8fb4", + "jsondocId": "ecf97588-4967-41ac-9904-2a7fdd858746", "name": "name", "format": "", "description": "Group name", @@ -5175,9 +5175,9 @@ "verb": "POST", "description": "Get creator metadata for group, returns userId as JSONObject", "methodName": "getGroupCreator", - "jsondocId": "acc6f631-68c8-4613-bd43-68cba1902aac", + "jsondocId": "2f507e4e-32d6-48a1-85cb-56168ebb3a3e", "bodyobject": { - "jsondocId": "42b8b3c3-cb80-4e1a-b0a9-1d841a9f810f", + "jsondocId": "45c4c826-51dc-4340-b89b-3bf4c61ca93a", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5187,7 +5187,7 @@ "apierrors": [], "path": "/group/getGroupCreator", "response": { - "jsondocId": "22646650-b07c-4fef-a567-abda6296fadf", + "jsondocId": "eef04e53-8710-4702-bdf5-47113345ad32", "mapValueObject": "", "mapKeyObject": "", "object": "group" @@ -5200,13 +5200,13 @@ "description": "Methods for managing groups" }, { - "jsondocId": "598f8065-2c30-42e1-9925-34a78ecce9c3", + "jsondocId": "5c62380d-4787-4b91-b23f-70c3ff6f865e", "methods": [{ "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "568152f8-2bf8-4aed-a821-e19848ffd580", + "jsondocId": "106c188a-ecda-4e66-b6ca-a0eba9b1e912", "name": "username", "format": "", "description": "", @@ -5215,7 +5215,7 @@ "allowedvalues": [] }, { - "jsondocId": "6fc9d3ca-23ca-4c68-9532-e26c4755778a", + "jsondocId": "aca923d9-4e14-4fb6-89c4-4b3602616a3f", "name": "password", "format": "", "description": "", @@ -5224,7 +5224,7 @@ "allowedvalues": [] }, { - "jsondocId": "a09791b9-b5f2-449f-a6ae-7b9fb1bc559c", + "jsondocId": "d49a97de-feaa-4fb3-a1eb-6c285dd28c45", "name": "date", "format": "", "description": "Date to query yyyy-MM-dd:HH:mm:ss or yyyy-MM-dd", @@ -5233,7 +5233,7 @@ "allowedvalues": [] }, { - "jsondocId": "ec89273e-cab6-4fae-b27a-430a23735ba9", + "jsondocId": "ef776568-6c3c-41e9-9d5b-84dffaf41ec3", "name": "afterDate", "format": "", "description": "Search after or on the given date.", @@ -5242,7 +5242,7 @@ "allowedvalues": [] }, { - "jsondocId": "c17aab30-1d4a-4645-af85-c7322df53250", + "jsondocId": "028eb14e-b75c-41ae-a383-02960e774576", "name": "beforeDate", "format": "", "description": "Search before or on the given date.", @@ -5251,7 +5251,7 @@ "allowedvalues": [] }, { - "jsondocId": "e86ac7d6-c886-4a11-bc3d-06809a850b5e", + "jsondocId": "42616453-ee38-447a-8ebd-46b034fabff0", "name": "max", "format": "", "description": "Max to return", @@ -5260,7 +5260,7 @@ "allowedvalues": [] }, { - "jsondocId": "005e33cc-6607-4f94-979d-3f27ede90e31", + "jsondocId": "2fc74366-c632-4234-96c5-2c9fd66d141e", "name": "sort", "format": "", "description": "Sort parameter (lastUpdated). See FeatureEvent object/table.", @@ -5269,7 +5269,7 @@ "allowedvalues": [] }, { - "jsondocId": "699ea680-883d-4a6b-967a-510708ed8322", + "jsondocId": "5843d4de-ba21-4e2f-8e0d-e079dcc1a6ad", "name": "order", "format": "", "description": "desc/asc sort order by sort param", @@ -5281,9 +5281,9 @@ "verb": "POST", "description": "Returns a JSON representation of all current Annotations before or after a given date.", "methodName": "findChanges", - "jsondocId": "ca572bcf-5602-447c-a18e-d0e769e2c905", + "jsondocId": "78a1c791-23ba-4d1e-98c8-ddb2d0e979cf", "bodyobject": { - "jsondocId": "a10f08b0-7674-441f-8cc8-3cd03703371b", + "jsondocId": "af775087-5123-4647-9c32-976d1a15699b", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5293,7 +5293,7 @@ "apierrors": [], "path": "/featureEvent/findChanges", "response": { - "jsondocId": "f49e9396-425f-407a-8e46-f1777d8dbd45", + "jsondocId": "59c1e782-b8f3-4dc3-92e9-9b0e6bf17321", "mapValueObject": "", "mapKeyObject": "", "object": "feature event" @@ -5305,14 +5305,14 @@ "description": "Methods for querying history" }, { - "jsondocId": "36f76a2f-9ff3-4d15-9d2b-6fbb4b5bcc5d", + "jsondocId": "b85a951c-83de-42a3-a526-2ff4a38d6ff0", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "e23b4efd-8c5e-4c5a-b5b3-24110d14a4c1", + "jsondocId": "004f0691-2db2-4c0d-8b1f-cc1fd1d1f781", "name": "username", "format": "", "description": "", @@ -5321,7 +5321,7 @@ "allowedvalues": [] }, { - "jsondocId": "de7e14c7-3270-4067-9b59-bc0d78d2839e", + "jsondocId": "8e7a621b-fde6-4be1-b744-edea834f5a1d", "name": "password", "format": "", "description": "", @@ -5330,7 +5330,7 @@ "allowedvalues": [] }, { - "jsondocId": "68e1d85b-2cd0-4165-a444-56ccc447abb2", + "jsondocId": "cdb26e67-c8af-42a0-ba4e-955a610b7ca5", "name": "type", "format": "", "description": "Type of annotated genomic features to export 'FASTA','GFF3','CHADO'.", @@ -5339,7 +5339,7 @@ "allowedvalues": [] }, { - "jsondocId": "f59288f8-af01-4e9c-944e-4d596ad86f6f", + "jsondocId": "e1ccc3cf-a68b-46f4-8af2-41f9995984f6", "name": "seqType", "format": "", "description": "Type of output sequence 'peptide','cds','cdna','genomic'.", @@ -5348,7 +5348,7 @@ "allowedvalues": [] }, { - "jsondocId": "54033251-cd5b-4344-8466-505dfaad7c1a", + "jsondocId": "c0891a39-38b1-495b-9461-06e7adf7e810", "name": "format", "format": "", "description": "'gzip' or 'text'", @@ -5357,7 +5357,7 @@ "allowedvalues": [] }, { - "jsondocId": "c6a8611c-1152-4fe2-b4f6-57177c8df9df", + "jsondocId": "d6a0ff59-0b95-44bf-a3f3-381185a7298a", "name": "sequences", "format": "", "description": "Names of references sequences to add (default is all).", @@ -5366,7 +5366,7 @@ "allowedvalues": [] }, { - "jsondocId": "499720de-353d-417c-bfeb-07369aba1030", + "jsondocId": "5ab611b3-2b10-4d28-b1f1-911d81deaf2e", "name": "organism", "format": "", "description": "Name of organism that sequences belong to (will default to last organism).", @@ -5375,7 +5375,7 @@ "allowedvalues": [] }, { - "jsondocId": "2bcabb0e-e342-43a6-abf5-19afbf3d6228", + "jsondocId": "d19fb88c-723f-42a9-8feb-ab9eb8b18b03", "name": "output", "format": "", "description": "Output method 'file','text'", @@ -5384,7 +5384,7 @@ "allowedvalues": [] }, { - "jsondocId": "c1646c90-f55b-44e9-89b7-8c39a550afef", + "jsondocId": "0f20aafc-1b98-44d6-8e44-c8b8f95736d2", "name": "exportAllSequences", "format": "", "description": "Export all reference sequences for an organism (over-rides 'sequences')", @@ -5393,7 +5393,7 @@ "allowedvalues": [] }, { - "jsondocId": "220aa948-b048-447d-abba-542283072c2d", + "jsondocId": "64b459c2-2617-453b-a0c5-ab9d70e91c03", "name": "region", "format": "", "description": "Highlighted genomic region to export in form sequence:min..max e.g., chr3:1001..1034", @@ -5405,9 +5405,9 @@ "verb": "POST", "description": "Write out genomic data. An example script is used in the https://github.com/GMOD/Apollo/blob/master/docs/web_services/examples/groovy/get_gff3.groovy", "methodName": "write", - "jsondocId": "fc11c49c-681d-486d-bda7-e21e9c55727f", + "jsondocId": "6e363fff-7092-4dc3-8b3e-efb7cac4d1c6", "bodyobject": { - "jsondocId": "669b819e-de6c-4f0a-8a6c-4255b4fa8cf6", + "jsondocId": "23b56442-2d08-4e9c-99e6-754a8f75058c", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5417,7 +5417,7 @@ "apierrors": [], "path": "/IOService/write", "response": { - "jsondocId": "9b40c3c4-4a2c-4e30-9b7f-b2911aef9700", + "jsondocId": "a6097b52-51a4-4196-bb41-1fc9785d961f", "mapValueObject": "", "mapKeyObject": "", "object": "i o service" @@ -5430,7 +5430,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "989b8cd0-a56a-49bf-b10c-d25e4eb9b1aa", + "jsondocId": "5626b53d-4524-4245-84c6-50b1e64a2052", "name": "username", "format": "", "description": "", @@ -5439,7 +5439,7 @@ "allowedvalues": [] }, { - "jsondocId": "4d76694b-4226-471c-92ac-c8ebda3367e6", + "jsondocId": "8fdcdc84-bfbe-4211-8055-58784c88967b", "name": "password", "format": "", "description": "", @@ -5448,7 +5448,7 @@ "allowedvalues": [] }, { - "jsondocId": "b05fb36f-c99a-4caa-b63c-5762f747825d", + "jsondocId": "cdbdbd20-5e19-4d28-a3ba-382493bc4f04", "name": "uuid", "format": "", "description": "UUID that holds the key to the stored download.", @@ -5457,7 +5457,7 @@ "allowedvalues": [] }, { - "jsondocId": "44678738-cb9a-42f0-8976-5f764d11958b", + "jsondocId": "22d7e999-f09e-42b3-8706-28dab492ad29", "name": "format", "format": "", "description": "'gzip' or 'text'", @@ -5469,9 +5469,9 @@ "verb": "POST", "description": "This is used to retrieve the a download link once the write operation was initialized using output: file.", "methodName": "download", - "jsondocId": "a10e2c35-1f44-43c2-843d-a5cd6322c94c", + "jsondocId": "0d98bfe4-04a3-4f48-b7c0-889051c0d4fc", "bodyobject": { - "jsondocId": "fa32bbb3-c507-4106-a5cf-5a142de4ec7c", + "jsondocId": "8332ae10-dc96-4bc3-911d-3b4898952f95", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5481,7 +5481,7 @@ "apierrors": [], "path": "/IOService/download", "response": { - "jsondocId": "28f26c54-94cf-466a-9ade-7e620f3ca570", + "jsondocId": "f353308a-d101-4859-8986-5cf0df90edd0", "mapValueObject": "", "mapKeyObject": "", "object": "i o service" @@ -5494,14 +5494,14 @@ "description": "Methods for bulk importing and exporting sequence data" }, { - "jsondocId": "4caf697d-3d6e-49d7-90b0-8021afe442d8", + "jsondocId": "5927ed10-776a-4b02-94b3-b1b131dad322", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "6b917464-46ff-4ae6-be1f-524076a73525", + "jsondocId": "339d28db-021f-4593-a6d3-f0b28e02a820", "name": "username", "format": "", "description": "", @@ -5510,7 +5510,7 @@ "allowedvalues": [] }, { - "jsondocId": "863daab1-0c59-4ae7-9068-d896753748f1", + "jsondocId": "5dc2c5fd-99bb-484f-92b6-f9cef9992b46", "name": "password", "format": "", "description": "", @@ -5519,7 +5519,7 @@ "allowedvalues": [] }, { - "jsondocId": "b2dc5264-d4f1-40e3-aca0-fb60d3591952", + "jsondocId": "a3c1f149-cb40-42e0-b580-38a9c9a6bc4b", "name": "organism", "format": "", "description": "Pass an Organism JSON object with an 'id' that corresponds to the organism to be removed", @@ -5531,9 +5531,9 @@ "verb": "POST", "description": "Remove an organism", "methodName": "deleteOrganism", - "jsondocId": "1ecc84e7-ef42-4c7f-9520-3c87a1ab5a7d", + "jsondocId": "a44fc656-ae20-4c45-be6b-96cb59993f54", "bodyobject": { - "jsondocId": "913867b8-7b93-4bd1-86ae-ec53dad4a9cd", + "jsondocId": "29b39c60-c13b-475e-9358-8e9b53b377c2", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5543,7 +5543,7 @@ "apierrors": [], "path": "/organism/deleteOrganism", "response": { - "jsondocId": "c7092a5f-8976-45a4-a1ce-5deccaadb02f", + "jsondocId": "615aa4a3-2bf3-4478-8bf9-bb831cd808a7", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5556,7 +5556,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e709887c-1358-4107-a10f-5fdccc647c5a", + "jsondocId": "b3d9abc6-b611-47ff-aaba-2acd53c3f856", "name": "username", "format": "", "description": "", @@ -5565,7 +5565,7 @@ "allowedvalues": [] }, { - "jsondocId": "ce79ff9f-c04b-43e0-9657-b34a12d49556", + "jsondocId": "b394dfdf-6ec4-4274-8e07-04e427bfc687", "name": "password", "format": "", "description": "", @@ -5574,7 +5574,7 @@ "allowedvalues": [] }, { - "jsondocId": "7b3d5440-1ed7-48fb-8514-ad4de09f4db4", + "jsondocId": "2ff7d12e-0069-44c5-9a06-5df5e7bcbe01", "name": "organism", "format": "", "description": "ID or commonName that can be used to uniquely identify an organism", @@ -5586,9 +5586,9 @@ "verb": "POST", "description": "Delete an organism along with its data directory and returns a JSON object containing properties of the deleted organism", "methodName": "deleteOrganismWithSequence", - "jsondocId": "51de9882-305c-434b-a16a-87dcbe7f2a73", + "jsondocId": "1bf18477-5d25-454d-b82a-f3430589a24a", "bodyobject": { - "jsondocId": "c03b8eac-bd18-41f0-8038-9d8d370d443f", + "jsondocId": "835e6f73-8964-4109-b4d0-2e5c09657a87", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5598,7 +5598,7 @@ "apierrors": [], "path": "/organism/deleteOrganismWithSequence", "response": { - "jsondocId": "a832035f-7bc5-4bd2-9617-d56542a241ab", + "jsondocId": "ea9c7d7a-bbb1-4cab-85b4-9d2bd9c2cc12", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5611,7 +5611,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "186fa123-5241-44aa-bd60-5a3a1f2d9940", + "jsondocId": "d7078b7a-8f9d-4c4d-b13c-e5a85df7d83b", "name": "username", "format": "", "description": "", @@ -5620,7 +5620,7 @@ "allowedvalues": [] }, { - "jsondocId": "06a8ddca-672d-41af-aba5-1f2e8b7a3daf", + "jsondocId": "54f952ce-108c-4e44-afda-356de59d4030", "name": "password", "format": "", "description": "", @@ -5629,21 +5629,30 @@ "allowedvalues": [] }, { - "jsondocId": "9c0098a9-5306-465e-bc2b-c838159883b0", + "jsondocId": "57fa4002-5a04-415b-9588-1b021fc57077", "name": "organism", "format": "", - "description": "Common name or ID for the organism", + "description": "ID or commonName that can be used to uniquely identify an organism.", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "9ff3ba97-f3d6-4647-afed-f0aa75e2506c", + "name": "sequences", + "format": "", + "description": "(optional) Comma-delimited sequence names on that organism if only certain sequences should be deleted.", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Finds sequences for a given organism and returns a JSON object including the username, organism and a JSONArray of sequences", - "methodName": "getSequencesForOrganism", - "jsondocId": "f1fb0346-5880-437c-a6d0-ccbd4e2d7f40", + "description": "Remove features from an organism", + "methodName": "deleteOrganismFeatures", + "jsondocId": "7713c3c7-449b-4ead-b0d1-9a49e412b041", "bodyobject": { - "jsondocId": "46811370-00ec-4118-9b98-bcef267fc136", + "jsondocId": "72dba371-7608-4dbb-bf3d-5bd6beb4a21f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5651,9 +5660,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/getSequencesForOrganism", + "path": "/organism/deleteOrganismFeatures", "response": { - "jsondocId": "f058ddb5-07b0-4f84-a7eb-f9d570770c1b", + "jsondocId": "601bf04a-c8a6-4c89-b9f7-9c6cefbe173f", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5666,7 +5675,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "0bc74d44-7f0c-419a-8c8c-4f9ab1313278", + "jsondocId": "68f261ed-d44a-4a33-a47f-6ae9ffb0ab52", "name": "username", "format": "", "description": "", @@ -5675,7 +5684,7 @@ "allowedvalues": [] }, { - "jsondocId": "3dad60c8-21d9-4e2a-9283-a09507c698c0", + "jsondocId": "bc8e3400-76c6-4c55-b0cb-f6bca29b0098", "name": "password", "format": "", "description": "", @@ -5684,25 +5693,7 @@ "allowedvalues": [] }, { - "jsondocId": "c78d43d2-3ce9-41e9-8dbd-34ac7e44559a", - "name": "id", - "format": "", - "description": "unique id of organism to change", - "type": "long", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "79c76b2e-494d-4d36-ac1a-2767330c4751", - "name": "directory", - "format": "", - "description": "filesystem path for the organisms data directory (required)", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "fcabfa50-b3e6-4ed2-a7b2-0c2df683b8be", + "jsondocId": "eb8fc4d4-89d4-4932-87f9-8c09dc0ee697", "name": "species", "format": "", "description": "species name", @@ -5711,7 +5702,7 @@ "allowedvalues": [] }, { - "jsondocId": "5b48a125-1a88-410a-9856-d8ac337d7fd5", + "jsondocId": "47f03714-92b2-4a50-b69f-8ebc82dc4cc5", "name": "genus", "format": "", "description": "species genus", @@ -5720,16 +5711,16 @@ "allowedvalues": [] }, { - "jsondocId": "b611965b-8dae-47d1-92a2-2ad8d7b04a2b", + "jsondocId": "cf71b5ae-2b21-47a4-90c5-5111bbd1fce2", "name": "blatdb", "format": "", - "description": "filesystem path for a BLAT database (e.g. a .2bit file)", + "description": "filesystem path for a BLAT database (e.g. a .2bit file) if not uploaded", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "8277b007-632f-4c17-a969-98bbe3ad97e5", + "jsondocId": "2ad9e6af-5872-4f6c-80c6-f84f741ac4f4", "name": "publicMode", "format": "", "description": "a flag for whether the organism appears as in the public genomes list", @@ -5738,16 +5729,16 @@ "allowedvalues": [] }, { - "jsondocId": "6f14a9df-dd11-47c1-af4a-e86102155d41", - "name": "name", + "jsondocId": "92b3a437-c938-42b4-a72e-40fc8a45f188", + "name": "commonName", "format": "", - "description": "a common name used for the organism", + "description": "commonName for an organism", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "046eb89a-3355-4f76-aa89-399b06945316", + "jsondocId": "0fe76a65-d325-4772-b075-2ce8e6263827", "name": "nonDefaultTranslationTable", "format": "", "description": "non-default translation table", @@ -5756,21 +5747,48 @@ "allowedvalues": [] }, { - "jsondocId": "aec4102e-65bf-4b59-9d51-41ea24db1c1d", - "name": "metadata", + "jsondocId": "0a9c932d-219a-463b-adb5-5865d10363c1", + "name": "metadata", + "format": "", + "description": "organism metadata", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "1ded598e-b41e-47f2-9ba3-b29e1cc7495e", + "name": "organismData", + "format": "", + "description": "zip or tar.gz compressed data directory (if other options not used). Blat data should include a .2bit suffix and be in a directory 'searchDatabaseData'", + "type": "file", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "6e2c9ae4-3109-4239-9478-cf2bf61059f9", + "name": "sequenceData", + "format": "", + "description": "FASTA file (optionally compressed) to automatically upload with", + "type": "file", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "b7d66ce9-08d2-4c76-9d59-b363d6988efc", + "name": "searchDatabaseData", "format": "", - "description": "organism metadata", - "type": "string", + "description": "2bit file for blat search (optional)", + "type": "file", "required": "true", "allowedvalues": [] } ], "verb": "POST", "description": "Adds an organism returning a JSON array of all organisms", - "methodName": "updateOrganismInfo", - "jsondocId": "3722cb1f-3fc7-4a36-aaa8-280647e0cce4", + "methodName": "addOrganismWithSequence", + "jsondocId": "ea1d83fa-0a59-46b3-b0cc-ddb58a0a1855", "bodyobject": { - "jsondocId": "920ee6e7-31ff-4902-bb90-c41927868b6c", + "jsondocId": "0ce2d56f-4793-414f-8f48-6e45a1d7d762", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5778,9 +5796,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/updateOrganismInfo", + "path": "/organism/addOrganismWithSequence", "response": { - "jsondocId": "506c5943-4a4e-4a21-aef3-abe544b08b67", + "jsondocId": "039e261b-8a51-42ff-9236-f344fbf1158d", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5793,7 +5811,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "2a157638-554d-40bf-a3b7-1650f112073d", + "jsondocId": "6183fb1f-fc56-40c3-b8c7-507003e2986a", "name": "username", "format": "", "description": "", @@ -5802,7 +5820,7 @@ "allowedvalues": [] }, { - "jsondocId": "d7c581b0-1ffe-4829-919d-e33a0faa6132", + "jsondocId": "dc6abb45-426f-4456-a03c-23e96908fa1d", "name": "password", "format": "", "description": "", @@ -5811,30 +5829,30 @@ "allowedvalues": [] }, { - "jsondocId": "596f16af-9724-4883-82ea-6ad12024416f", - "name": "id", + "jsondocId": "d0e6df80-8be8-455e-b93f-7ba2eaaf208b", + "name": "organism", "format": "", - "description": "unique id of organism to change", - "type": "long", + "description": "ID or commonName that can be used to uniquely identify an organism", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "574ba3b7-1d48-4ef0-9b12-d967df7ab958", - "name": "metadata", + "jsondocId": "9c310762-b430-40b4-b9c5-1b73fba591a1", + "name": "trackLabel", "format": "", - "description": "organism metadata", + "description": "Name of track", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Update organism metadata", - "methodName": "updateOrganismMetadata", - "jsondocId": "647c9771-c0a7-49ea-895b-0b3466ba8fb3", + "description": "Removes an added track from an existing organism returning a JSON object containing all tracks for the current organism.", + "methodName": "removeTrackFromOrganism", + "jsondocId": "b838e417-40d2-403d-bc95-251dbde1a4b8", "bodyobject": { - "jsondocId": "69fc7857-2c38-4bcd-9675-8865f4964f6e", + "jsondocId": "548cfbe1-cb06-4b54-9fe6-53fabfb09ec6", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5842,9 +5860,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/updateOrganismMetadata", + "path": "/organism/removeTrackFromOrganism", "response": { - "jsondocId": "c15c1bdd-406e-465c-8e16-d10ade7db1c3", + "jsondocId": "67143ec1-4f4b-4c73-9f69-09b850a4c63d", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5857,7 +5875,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "57af6e5d-c1b7-4025-ad05-409fda293654", + "jsondocId": "fa03fcab-a164-470d-9b33-d4ec20d9153d", "name": "username", "format": "", "description": "", @@ -5866,7 +5884,7 @@ "allowedvalues": [] }, { - "jsondocId": "40674c53-48d6-4e3b-b66f-54821a458eaf", + "jsondocId": "9a98dfe3-9abb-4fb2-bf45-ac7c64edf33e", "name": "password", "format": "", "description": "", @@ -5875,21 +5893,57 @@ "allowedvalues": [] }, { - "jsondocId": "e8e01959-feb7-4250-b198-b0565bf89e8c", + "jsondocId": "0f0c2745-1585-4480-ac78-7b004a5c8e91", "name": "organism", "format": "", "description": "ID or commonName that can be used to uniquely identify an organism", "type": "string", "required": "true", "allowedvalues": [] + }, + { + "jsondocId": "da1d2ac6-4262-42c6-98ee-a371f2f6bda1", + "name": "trackData", + "format": "", + "description": "zip or tar.gz compressed track data", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "2a463f61-f7e6-457e-b169-2d0d8f967379", + "name": "trackFile", + "format": "", + "description": "track file (*.bam, *.vcf, *.bw, *gff)", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "4fbd8436-7d37-4265-9027-8225aa88e8d5", + "name": "trackFileIndex", + "format": "", + "description": "index (*.bai, *.tbi)", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "a3293601-0765-4a5a-9756-84e1f845c5a2", + "name": "trackConfig", + "format": "", + "description": "Track configuration (JBrowse JSON)", + "type": "string", + "required": "true", + "allowedvalues": [] } ], "verb": "POST", - "description": "Get creator metadata for organism, returns userId as String", - "methodName": "getOrganismCreator", - "jsondocId": "d1d0645f-8e1d-4f8c-b293-2ca6c96c2652", + "description": "Adds a track to an existing organism returning a JSON object containing all tracks for the current organism.", + "methodName": "addTrackToOrganism", + "jsondocId": "99b180fb-0123-4466-a683-1b63b43c0d53", "bodyobject": { - "jsondocId": "d07a498b-677e-49dd-b4bc-f01502937142", + "jsondocId": "a47f948b-c5f8-4d20-a291-6d9c88357afd", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5897,9 +5951,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/getOrganismCreator", + "path": "/organism/addTrackToOrganism", "response": { - "jsondocId": "2243de65-52f7-4772-8cdc-43eae0f78be7", + "jsondocId": "cda94e39-88db-4e64-8f94-9d32f47dd41d", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5912,7 +5966,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "bda15ac1-e932-40ba-86dc-1ccb93b4709e", + "jsondocId": "ae1503b8-db5a-4146-a11a-dfb261eeac47", "name": "username", "format": "", "description": "", @@ -5921,7 +5975,7 @@ "allowedvalues": [] }, { - "jsondocId": "492db083-f478-4301-a560-0c5c52191e45", + "jsondocId": "f0e5a736-0696-4ada-87ae-a41ff1a373a6", "name": "password", "format": "", "description": "", @@ -5930,21 +5984,30 @@ "allowedvalues": [] }, { - "jsondocId": "6d1f39bf-7436-4087-b29e-c73ad435b1f3", + "jsondocId": "d778540f-c058-4bbc-a01c-87e1e4cdab99", "name": "organism", "format": "", - "description": "(optional) ID or commonName that can be used to uniquely identify an organism", + "description": "ID or commonName that can be used to uniquely identify an organism", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "a78cc110-9567-4ebb-9c10-32e71264ddf0", + "name": "trackLabel", + "format": "", + "description": "Track label corresponding to the track that is to be deleted", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Returns a JSON array of all organisms, or optionally, gets information about a specific organism", - "methodName": "findAllOrganisms", - "jsondocId": "050866bd-e3dd-417a-960e-e74db8fe7e8b", + "description": "Deletes a track from an existing organism and returns a JSON object of the deleted track's configuration", + "methodName": "deleteTrackFromOrganism", + "jsondocId": "3cdabde6-17cb-44fd-afab-4dd2b86bd620", "bodyobject": { - "jsondocId": "d962e92a-107b-4867-8305-c65cc5195a5f", + "jsondocId": "67a3d13c-f322-495a-bc1b-c9d1d1d505aa", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -5952,9 +6015,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/findAllOrganisms", + "path": "/organism/deleteTrackFromOrganism", "response": { - "jsondocId": "cb18c674-db01-41e3-a733-4f847e730a20", + "jsondocId": "8a9acd5a-5517-4d8b-bd7c-c9be49c39e37", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -5967,7 +6030,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "00dc847d-9993-474b-88ba-9372fc012958", + "jsondocId": "a05b7469-461e-488d-a77c-0e27fcdf9ce6", "name": "username", "format": "", "description": "", @@ -5976,7 +6039,7 @@ "allowedvalues": [] }, { - "jsondocId": "c35b9266-562c-4ae3-af1f-93f96ef2403e", + "jsondocId": "9f007d33-7d5e-4756-8303-bc88906a4d41", "name": "password", "format": "", "description": "", @@ -5985,7 +6048,7 @@ "allowedvalues": [] }, { - "jsondocId": "78d32c4f-24bf-405f-acf7-f6c35ef016aa", + "jsondocId": "aa1350ff-357a-4a92-85e8-55880b9a613a", "name": "organism", "format": "", "description": "ID or commonName that can be used to uniquely identify an organism", @@ -5994,7 +6057,7 @@ "allowedvalues": [] }, { - "jsondocId": "1c8213b6-3d51-488a-ba4a-c4cde1611793", + "jsondocId": "9bc5e6fe-cfd0-4dbb-9265-e0485a82639b", "name": "trackConfig", "format": "", "description": "Track configuration (JBrowse JSON)", @@ -6006,9 +6069,9 @@ "verb": "POST", "description": "Update a track in an existing organism returning a JSON object containing old and new track configurations", "methodName": "updateTrackForOrganism", - "jsondocId": "92998a9a-0c9d-4057-b79c-133ee16c310b", + "jsondocId": "57b8b6c1-4755-4186-b421-bbee5bd23886", "bodyobject": { - "jsondocId": "a2886c83-d5b0-401c-82f7-66c6bd113722", + "jsondocId": "4582a92d-fb4d-47cd-a52e-993be4e8bdc6", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6018,7 +6081,7 @@ "apierrors": [], "path": "/organism/updateTrackForOrganism", "response": { - "jsondocId": "9cfdddc4-01af-42d6-a0dd-d1d6e66d4e19", + "jsondocId": "9f71d4d2-ecb2-4a63-9c23-34b0496fe780", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6031,7 +6094,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "dbf64e2f-1e45-4031-9a4c-bf6b0436355d", + "jsondocId": "43301677-0ab9-43fe-8ed9-b2880119399c", "name": "username", "format": "", "description": "", @@ -6040,7 +6103,7 @@ "allowedvalues": [] }, { - "jsondocId": "a502871f-c08f-4893-b32b-eaa061810d0d", + "jsondocId": "f379ad45-2d22-4808-a852-bfcc8c359f7d", "name": "password", "format": "", "description": "", @@ -6049,7 +6112,7 @@ "allowedvalues": [] }, { - "jsondocId": "3b60c450-bfc2-420b-9f7c-a6f87198ed69", + "jsondocId": "750e9be9-87c6-4e28-87e4-1f44f87dcd7b", "name": "directory", "format": "", "description": "Filesystem path for the organisms data directory (required)", @@ -6058,7 +6121,7 @@ "allowedvalues": [] }, { - "jsondocId": "044032d5-e4b5-4239-8d5c-c62a407b1ed3", + "jsondocId": "86a3bed5-61aa-401e-b260-3a9de3259311", "name": "commonName", "format": "", "description": "A name used for the organism", @@ -6067,7 +6130,7 @@ "allowedvalues": [] }, { - "jsondocId": "85477e24-d0d6-4d9e-98ea-d75b12206943", + "jsondocId": "1d88f431-9935-4125-8832-077752a64929", "name": "species", "format": "", "description": "(optional) Species name", @@ -6076,7 +6139,7 @@ "allowedvalues": [] }, { - "jsondocId": "89adc9df-d8be-43df-8c02-0f3aeeff21bc", + "jsondocId": "601dd0ac-23c6-4151-a945-8a4f3c28a72a", "name": "genus", "format": "", "description": "(optional) Species genus", @@ -6085,7 +6148,7 @@ "allowedvalues": [] }, { - "jsondocId": "e81ea365-5c33-41d2-832e-c66e39b529a3", + "jsondocId": "e8ba4898-4c87-4960-a892-77a520647f19", "name": "blatdb", "format": "", "description": "(optional) Filesystem path for a BLAT database (e.g. a .2bit file)", @@ -6094,7 +6157,7 @@ "allowedvalues": [] }, { - "jsondocId": "bc14dc65-59ad-44a6-819b-84d1c2f15057", + "jsondocId": "55526241-15ab-4d7a-beb3-d3cc204d9dce", "name": "publicMode", "format": "", "description": "(optional) A flag for whether the organism appears as in the public genomes list (default false)", @@ -6103,7 +6166,7 @@ "allowedvalues": [] }, { - "jsondocId": "fecdeffa-bfb4-4af9-8763-6f19cf01a91c", + "jsondocId": "008e88c0-057d-48c1-82ac-a8b7d889d790", "name": "metadata", "format": "", "description": "(optional) Organism metadata", @@ -6112,7 +6175,7 @@ "allowedvalues": [] }, { - "jsondocId": "3a23b708-b773-44ef-b3d6-d0dc5b4f3699", + "jsondocId": "e303bbb0-dab6-4b82-8e07-8ad4ca2495b2", "name": "returnAllOrganisms", "format": "", "description": "(optional) Return all organisms (true / false) (default true)", @@ -6124,9 +6187,9 @@ "verb": "POST", "description": "Adds an organism returning a JSON array of all organisms", "methodName": "addOrganism", - "jsondocId": "f1ccee94-5732-47b5-aba6-d4f082be80af", + "jsondocId": "b44071ec-f8cc-4084-a576-defd95235918", "bodyobject": { - "jsondocId": "3458b3bc-fc8c-4f01-9f8a-d63ea9fada3c", + "jsondocId": "c3c8d414-8576-414c-910d-3913443ea9ec", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6136,7 +6199,7 @@ "apierrors": [], "path": "/organism/addOrganism", "response": { - "jsondocId": "88e6a423-c02e-49c2-87d8-dc9ecc117c1c", + "jsondocId": "c20e7a22-49c8-4a56-a885-fd779116d525", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6149,7 +6212,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e1f602c1-93c0-482e-b301-03f97a62e924", + "jsondocId": "7a197426-bc0f-4632-9a7a-4ed929cf24df", "name": "username", "format": "", "description": "", @@ -6158,7 +6221,7 @@ "allowedvalues": [] }, { - "jsondocId": "4b27d812-03de-4423-b3ab-1dd538c98879", + "jsondocId": "4df37f86-858b-445d-bfa5-985038f64af2", "name": "password", "format": "", "description": "", @@ -6167,30 +6230,21 @@ "allowedvalues": [] }, { - "jsondocId": "1d4b7eb0-3bd8-4cf9-8753-8ffd98429b97", + "jsondocId": "b1d286fa-50d2-4975-8e3f-7540e030e5e7", "name": "organism", "format": "", - "description": "ID or commonName that can be used to uniquely identify an organism.", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "a267feda-5cb4-4635-8b24-3fa370af2b96", - "name": "sequences", - "format": "", - "description": "(optional) Comma-delimited sequence names on that organism if only certain sequences should be deleted.", + "description": "Common name or ID for the organism", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Remove features from an organism", - "methodName": "deleteOrganismFeatures", - "jsondocId": "36680ebe-0bd8-4d8a-afd4-6e8f68f09f1d", + "description": "Finds sequences for a given organism and returns a JSON object including the username, organism and a JSONArray of sequences", + "methodName": "getSequencesForOrganism", + "jsondocId": "449b4583-a18c-4af8-b597-c1abde4bb424", "bodyobject": { - "jsondocId": "38c0d602-c7dd-4ead-a2e5-b44c3caa2972", + "jsondocId": "8355793d-9685-4bb3-b4e3-dfceeae8f429", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6198,9 +6252,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/deleteOrganismFeatures", + "path": "/organism/getSequencesForOrganism", "response": { - "jsondocId": "20df324b-99bc-4848-89f9-1c0f6bf0e65b", + "jsondocId": "012b35cc-4bdc-49d9-ae7e-82bbf27e7386", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6213,7 +6267,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "fd82e074-3421-47c3-a309-4de1de5cc285", + "jsondocId": "57b4c5e7-354c-49b1-a2c9-a18b18d91fac", "name": "username", "format": "", "description": "", @@ -6222,7 +6276,7 @@ "allowedvalues": [] }, { - "jsondocId": "8de48d51-a89d-4334-87cd-9e0f9df296b9", + "jsondocId": "daaf435e-a8e3-4042-af83-930d58a6713d", "name": "password", "format": "", "description": "", @@ -6231,7 +6285,25 @@ "allowedvalues": [] }, { - "jsondocId": "3a8b296f-cc21-4b62-9229-c0de424eba49", + "jsondocId": "06795774-5de4-407c-ad28-67f32aef5af3", + "name": "id", + "format": "", + "description": "unique id of organism to change", + "type": "long", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "190fa9c0-5af0-4644-9949-9a953e9e0701", + "name": "directory", + "format": "", + "description": "filesystem path for the organisms data directory (required)", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "e55511e5-8f30-491c-a66c-163a905335a8", "name": "species", "format": "", "description": "species name", @@ -6240,7 +6312,7 @@ "allowedvalues": [] }, { - "jsondocId": "ac4b8f2f-5fbb-4ba2-b236-580107641f5a", + "jsondocId": "c34e3666-c37d-4321-8c0c-3adeaee55a68", "name": "genus", "format": "", "description": "species genus", @@ -6249,16 +6321,16 @@ "allowedvalues": [] }, { - "jsondocId": "a6f7d19d-a30b-4acc-b3a9-0928c8c50a23", + "jsondocId": "0ac6f6af-4d4f-48d0-ab15-9d2045bfe382", "name": "blatdb", "format": "", - "description": "filesystem path for a BLAT database (e.g. a .2bit file) if not uploaded", + "description": "filesystem path for a BLAT database (e.g. a .2bit file)", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "b0f6d0c0-03bf-4daa-ab49-cebf9030b633", + "jsondocId": "418340be-2a72-44eb-a83b-1c69b6c6fdc7", "name": "publicMode", "format": "", "description": "a flag for whether the organism appears as in the public genomes list", @@ -6267,16 +6339,16 @@ "allowedvalues": [] }, { - "jsondocId": "af78580a-0067-4dc1-9a9f-4ad6b6d2c7a2", - "name": "commonName", + "jsondocId": "39d33323-2580-471e-8154-4ec5bea88535", + "name": "name", "format": "", - "description": "commonName for an organism", + "description": "a common name used for the organism", "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "2f157857-616f-4d3a-9eb9-caa496522882", + "jsondocId": "c43fafc7-4c1d-4ec0-959c-85b77a8065df", "name": "nonDefaultTranslationTable", "format": "", "description": "non-default translation table", @@ -6285,7 +6357,7 @@ "allowedvalues": [] }, { - "jsondocId": "0a9b468a-ff58-4a4a-8730-9a8e2b415392", + "jsondocId": "157994b3-0e3c-4c92-905f-7f4709d236c6", "name": "metadata", "format": "", "description": "organism metadata", @@ -6294,7 +6366,7 @@ "allowedvalues": [] }, { - "jsondocId": "bcd44deb-fda2-47ca-b845-17485ad7cadf", + "jsondocId": "8b1fefc7-7358-442d-a04f-add1c529ae2f", "name": "organismData", "format": "", "description": "zip or tar.gz compressed data directory (if other options not used). Blat data should include a .2bit suffix and be in a directory 'searchDatabaseData'", @@ -6303,7 +6375,7 @@ "allowedvalues": [] }, { - "jsondocId": "b0490b76-16ee-4b6b-a9a9-a95652916b9a", + "jsondocId": "e1084355-a889-4211-aa4e-cc569b71888d", "name": "sequenceData", "format": "", "description": "FASTA file (optionally compressed) to automatically upload with", @@ -6312,7 +6384,7 @@ "allowedvalues": [] }, { - "jsondocId": "2e085f62-8174-4e4e-b22f-e86a37d68451", + "jsondocId": "b585f0ca-fd0e-4ae4-b245-5f3cdd7b2e05", "name": "searchDatabaseData", "format": "", "description": "2bit file for blat search (optional)", @@ -6323,10 +6395,10 @@ ], "verb": "POST", "description": "Adds an organism returning a JSON array of all organisms", - "methodName": "addOrganismWithSequence", - "jsondocId": "e6ffa310-0e30-4090-b5d7-9b9e52af7b0a", + "methodName": "updateOrganismInfo", + "jsondocId": "b78db23c-3fdc-449e-b16b-b9d3266223d7", "bodyobject": { - "jsondocId": "d4f0874a-e037-4da7-a740-2d5a9bfbda8a", + "jsondocId": "7d8b3943-ac67-48c9-8fd1-23d1a221a66e", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6334,9 +6406,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/addOrganismWithSequence", + "path": "/organism/updateOrganismInfo", "response": { - "jsondocId": "d4da8eb7-fc72-439a-a8ae-1407ca74a6e4", + "jsondocId": "5d809b7d-791b-4720-b326-1761f4b8a508", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6349,7 +6421,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "df6c74a9-0c43-4dce-928e-8a2867aa160e", + "jsondocId": "cf4bb77b-bc52-4052-b654-5da7778398e1", "name": "username", "format": "", "description": "", @@ -6358,7 +6430,7 @@ "allowedvalues": [] }, { - "jsondocId": "8da09eb7-6dd1-49ee-afb4-51b315af0c8b", + "jsondocId": "46f7a260-24ef-4ef5-9931-b817ef116389", "name": "password", "format": "", "description": "", @@ -6367,30 +6439,30 @@ "allowedvalues": [] }, { - "jsondocId": "93e38e71-ff8f-4250-9944-4d85dfdfd480", - "name": "organism", + "jsondocId": "31f2f2f9-cf38-481b-96ff-79a871f1567d", + "name": "id", "format": "", - "description": "ID or commonName that can be used to uniquely identify an organism", - "type": "string", + "description": "unique id of organism to change", + "type": "long", "required": "true", "allowedvalues": [] }, { - "jsondocId": "a11ec43e-942b-4976-a997-6085bcc85b2c", - "name": "trackLabel", + "jsondocId": "1acf9008-1189-4e84-94c0-deebac7ee9db", + "name": "metadata", "format": "", - "description": "Name of track", + "description": "organism metadata", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Removes an added track from an existing organism returning a JSON object containing all tracks for the current organism.", - "methodName": "removeTrackFromOrganism", - "jsondocId": "1ee2ae62-1b1b-4991-9d2c-e432e463c2ef", + "description": "Update organism metadata", + "methodName": "updateOrganismMetadata", + "jsondocId": "4523f2ca-3311-49da-9bc9-a4d9cd7d1821", "bodyobject": { - "jsondocId": "2e858d10-2192-4fb6-932e-6096efb05a11", + "jsondocId": "96980834-78aa-42f6-9484-792c546a1009", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6398,9 +6470,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/removeTrackFromOrganism", + "path": "/organism/updateOrganismMetadata", "response": { - "jsondocId": "192c5cf0-c58a-4fb9-867c-01f38f126d00", + "jsondocId": "34d027f2-faff-4010-b9f5-2b945eb72eff", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6413,7 +6485,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "e2f2e485-4a7a-4a32-be55-ed36cc49a899", + "jsondocId": "2f86e637-d3b5-4602-9520-c29bc20a14cd", "name": "username", "format": "", "description": "", @@ -6422,7 +6494,7 @@ "allowedvalues": [] }, { - "jsondocId": "b31c365a-9bb7-4556-acca-d4331e3054a6", + "jsondocId": "a0ab3069-f8c3-45f6-977f-3c8307884937", "name": "password", "format": "", "description": "", @@ -6431,57 +6503,21 @@ "allowedvalues": [] }, { - "jsondocId": "23f59ef1-3974-4e7d-81e7-fb8f0789be39", + "jsondocId": "769beea4-8f1f-4c74-a968-8626df30a4ca", "name": "organism", "format": "", "description": "ID or commonName that can be used to uniquely identify an organism", "type": "string", "required": "true", "allowedvalues": [] - }, - { - "jsondocId": "9f81f862-5123-4509-a324-df799ef4ad02", - "name": "trackData", - "format": "", - "description": "zip or tar.gz compressed track data", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "fe78f85d-cc7e-4559-85bf-3ac1fb98b5a7", - "name": "trackFile", - "format": "", - "description": "track file (*.bam, *.vcf, *.bw, *gff)", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "86eb04e0-0c3a-483b-8935-336c1b986d24", - "name": "trackFileIndex", - "format": "", - "description": "index (*.bai, *.tbi)", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "5f7ac5fb-b701-403d-a73c-7d965c419b52", - "name": "trackConfig", - "format": "", - "description": "Track configuration (JBrowse JSON)", - "type": "string", - "required": "true", - "allowedvalues": [] } ], "verb": "POST", - "description": "Adds a track to an existing organism returning a JSON object containing all tracks for the current organism.", - "methodName": "addTrackToOrganism", - "jsondocId": "fdbfce90-add5-4130-8a9f-9368c4fb0467", + "description": "Get creator metadata for organism, returns userId as String", + "methodName": "getOrganismCreator", + "jsondocId": "e17bc552-2c08-4629-94bc-225b11687375", "bodyobject": { - "jsondocId": "282525dd-2154-47b9-8e9b-5d671c9db110", + "jsondocId": "25427fc7-5b6f-4cf0-b520-7504f0601742", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6489,9 +6525,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/addTrackToOrganism", + "path": "/organism/getOrganismCreator", "response": { - "jsondocId": "6ae4967d-8b39-4026-bd24-df23288920e1", + "jsondocId": "031a424a-f452-45bf-b26b-bb9ce1e554cb", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6504,7 +6540,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "25a78256-3940-4749-bdf4-6e2a73132f66", + "jsondocId": "755fe7f4-02c1-41b8-bedb-50c9f2acf8dd", "name": "username", "format": "", "description": "", @@ -6513,7 +6549,7 @@ "allowedvalues": [] }, { - "jsondocId": "94ee4b11-14fb-4219-9f75-76d2fe77cf73", + "jsondocId": "c4f62b1a-7265-4fb6-8cb9-c99b5289d262", "name": "password", "format": "", "description": "", @@ -6522,30 +6558,21 @@ "allowedvalues": [] }, { - "jsondocId": "79163e1a-54e9-4e7a-a762-c8098116515e", + "jsondocId": "4abbc849-805d-4296-8d59-7abbfccd8896", "name": "organism", "format": "", - "description": "ID or commonName that can be used to uniquely identify an organism", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "d7e58686-8792-4623-affe-bb45da7d52a1", - "name": "trackLabel", - "format": "", - "description": "Track label corresponding to the track that is to be deleted", + "description": "(optional) ID or commonName that can be used to uniquely identify an organism", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Deletes a track from an existing organism and returns a JSON object of the deleted track's configuration", - "methodName": "deleteTrackFromOrganism", - "jsondocId": "b08563c9-0938-4057-af13-59edc5c1008e", + "description": "Returns a JSON array of all organisms, or optionally, gets information about a specific organism", + "methodName": "findAllOrganisms", + "jsondocId": "df3be650-a18d-41bd-8dfa-ee0b6f1a6090", "bodyobject": { - "jsondocId": "faa502ec-2b68-4a8e-9beb-dbf646bae29d", + "jsondocId": "d8482f82-753c-43f8-8a6e-468f948b544f", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6553,9 +6580,9 @@ "object": "organism" }, "apierrors": [], - "path": "/organism/deleteTrackFromOrganism", + "path": "/organism/findAllOrganisms", "response": { - "jsondocId": "a39294e5-02e9-4ddc-87ee-8fa56c27f752", + "jsondocId": "6f2aa62f-7c83-4647-911a-ccea4f288d22", "mapValueObject": "", "mapKeyObject": "", "object": "organism" @@ -6568,14 +6595,14 @@ "description": "Methods for managing organisms" }, { - "jsondocId": "e0a3b859-76da-46ea-bf0e-2a1403da9617", + "jsondocId": "35fc648b-baa9-43bb-81fb-c8cb6c043532", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "2bc4b0b3-7813-40df-96e2-8b4592f185ad", + "jsondocId": "efd7739a-7fbb-466a-af72-e2d07807f345", "name": "organismString", "format": "", "description": "Organism common name or ID(required)", @@ -6584,7 +6611,7 @@ "allowedvalues": [] }, { - "jsondocId": "1a5daf5d-a092-450d-9667-ac6848064a4c", + "jsondocId": "69a02373-0743-4eef-9566-2d01fb2d7ccd", "name": "sequenceName", "format": "", "description": "Sequence name(required)", @@ -6593,7 +6620,7 @@ "allowedvalues": [] }, { - "jsondocId": "450a0a55-87e4-452d-a859-52d72675b8c8", + "jsondocId": "3d033eca-b3f5-4a0f-b755-f1548d5becf0", "name": "fmin", "format": "", "description": "Minimum range(required)", @@ -6602,7 +6629,7 @@ "allowedvalues": [] }, { - "jsondocId": "4e9e9c43-bebc-4e2a-b6de-27f05732501a", + "jsondocId": "ef2270b6-b48a-4dae-914c-c9585c3250cb", "name": "fmax", "format": "", "description": "Maximum range (required)", @@ -6611,7 +6638,7 @@ "allowedvalues": [] }, { - "jsondocId": "c9ca280f-a700-4e71-b795-3b0ef9d5114f", + "jsondocId": "305aa101-c7ec-4c64-9f12-b546a85285b5", "name": "ignoreCache", "format": "", "description": "(default false). Use cache for request if available.", @@ -6623,12 +6650,12 @@ "verb": "GET", "description": "Get sequence data within a range", "methodName": "sequenceByLocation", - "jsondocId": "2c57b61c-b9bf-4b72-a395-9ab451fadb74", + "jsondocId": "630b46e9-f806-44e6-a211-3e616e20ed4c", "bodyobject": null, "apierrors": [], "path": "/sequence//:..?ignoreCache=", "response": { - "jsondocId": "f0d4e320-a7c5-46bd-b2d9-3b49d7600ce5", + "jsondocId": "62c40bd3-f4c9-4755-99b4-42dfb762a4d5", "mapValueObject": "", "mapKeyObject": "", "object": "sequence" @@ -6641,7 +6668,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "2ec0f481-9a9f-4d88-9702-8c5607278327", + "jsondocId": "11d830c0-3dcc-4b94-b476-d8d37ff7bd18", "name": "organismString", "format": "", "description": "Organism common name or ID (required)", @@ -6650,7 +6677,7 @@ "allowedvalues": [] }, { - "jsondocId": "f3db8c25-064f-4120-be0c-bff9f7ef69eb", + "jsondocId": "684ed146-bee0-48f4-b532-809aa0dc8c5b", "name": "sequenceName", "format": "", "description": "Sequence name (required)", @@ -6659,7 +6686,7 @@ "allowedvalues": [] }, { - "jsondocId": "1ca7b140-012d-47a9-8c1b-b182afbfe5b3", + "jsondocId": "78dce39f-5b9a-4484-bf14-121102bb4186", "name": "featureName", "format": "", "description": "The uniqueName (UUID) or given name of the feature (typically transcript) of the element to retrieve sequence from", @@ -6668,7 +6695,7 @@ "allowedvalues": [] }, { - "jsondocId": "d4d7f14f-b7ab-40e4-932a-716dea3f03c2", + "jsondocId": "68f5c105-9ae9-402a-94f4-399f38e4b43b", "name": "type", "format": "", "description": "(default genomic) Return type: genomic, cds, cdna, peptide", @@ -6677,7 +6704,7 @@ "allowedvalues": [] }, { - "jsondocId": "6d40b43a-f009-468e-8b3a-f70d4652d1c3", + "jsondocId": "ee5daaaa-1e0a-4218-8a79-f6660cf14404", "name": "ignoreCache", "format": "", "description": "(default false). Use cache for request if available.", @@ -6689,12 +6716,12 @@ "verb": "GET", "description": "Get sequence data as for a selected name", "methodName": "sequenceByName", - "jsondocId": "0ea5f5d6-98b5-4e0e-90ca-bd80040461da", + "jsondocId": "40147e5a-0e76-4dde-9910-d8b7dddf7280", "bodyobject": null, "apierrors": [], "path": "/sequence///.?ignoreCache=", "response": { - "jsondocId": "d6b26232-a179-401e-a491-7e19c209abc5", + "jsondocId": "397a34c4-5130-4515-9d01-87de5c88146d", "mapValueObject": "", "mapKeyObject": "", "object": "sequence" @@ -6707,7 +6734,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "5810c192-03cb-4380-93c0-b407d8c1be0e", + "jsondocId": "0c35aca9-b24d-44d3-afbf-86a243133c16", "name": "organismName", "format": "", "description": "Organism common name (required)", @@ -6716,7 +6743,7 @@ "allowedvalues": [] }, { - "jsondocId": "9919efc2-c1fc-470e-b832-2bff998b6281", + "jsondocId": "95b68089-05ad-4504-a370-8c4cbbd6a1df", "name": "sequenceName", "format": "", "description": "Sequence name (required)", @@ -6728,12 +6755,12 @@ "verb": "GET", "description": "Remove sequence cache for an organism and sequence", "methodName": "clearSequenceCache", - "jsondocId": "216a3516-0cfc-4911-9c43-0f50fe81003d", + "jsondocId": "b3d7a0c3-a207-49b4-9d62-14f7b1f4d125", "bodyobject": null, "apierrors": [], "path": "/sequence/cache/clear//", "response": { - "jsondocId": "876ceb64-d375-4e9c-8b84-88344aaca5e5", + "jsondocId": "8a01bb58-b9ad-4ea0-ba5f-8446e288826d", "mapValueObject": "", "mapKeyObject": "", "object": "sequence" @@ -6745,7 +6772,7 @@ "headers": [], "pathparameters": [], "queryparameters": [{ - "jsondocId": "ad5bc021-6286-4a78-a894-b145b322d9ba", + "jsondocId": "819eb6bc-638e-4858-a1b2-be778bc28cd3", "name": "organismName", "format": "", "description": "Organism common name (required) or 'ALL' if admin", @@ -6756,12 +6783,12 @@ "verb": "GET", "description": "Remove sequence cache for an organism", "methodName": "clearOrganismCache", - "jsondocId": "13942f26-eeeb-426e-a9d9-cbc38b69ee5b", + "jsondocId": "9d939f18-4cbc-4123-936a-419235c3e4e9", "bodyobject": null, "apierrors": [], "path": "/sequence/cache/clear/", "response": { - "jsondocId": "48efac8e-8b46-4b1f-a453-8427e5f4e644", + "jsondocId": "6c721702-f786-4252-84fe-253bee655e7a", "mapValueObject": "", "mapKeyObject": "", "object": "sequence" @@ -6774,14 +6801,14 @@ "description": "Methods for retrieving sequence data" }, { - "jsondocId": "d0e30600-4e8a-409c-a927-8f5d07c8c743", + "jsondocId": "aea1698b-8221-4223-9d3e-2aa6aedb04d3", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "6c5271da-4423-404b-98f0-2d5d92859d3e", + "jsondocId": "5e47eddd-8c58-4592-a056-2c15226f618d", "name": "featureType", "format": "", "description": "Feature type", @@ -6790,7 +6817,7 @@ "allowedvalues": [] }, { - "jsondocId": "e67791cd-4a68-4c7a-b562-4ba609a98077", + "jsondocId": "ae8b20f5-73ed-41ec-8bb0-766abb8c7303", "name": "organism", "format": "", "description": "Organism name", @@ -6799,7 +6826,7 @@ "allowedvalues": [] }, { - "jsondocId": "69a6f2a1-a458-434b-abc0-c10d5f0e19c5", + "jsondocId": "7826d9f9-f066-4896-ba65-bf2f71523cc8", "name": "query", "format": "", "description": "Query value", @@ -6811,12 +6838,12 @@ "verb": "GET", "description": "Returns a JSON array of all suggested names, or optionally, gets information about a specific suggested name", "methodName": "search", - "jsondocId": "4815fefa-d824-4853-9a89-4fe09ff27aef", + "jsondocId": "8a768310-4139-495c-8a99-8419152386ff", "bodyobject": null, "apierrors": [], "path": "/suggestedName/search", "response": { - "jsondocId": "643e10ae-eb49-4485-95f5-81299b84be08", + "jsondocId": "24467ff6-4c41-4402-ae7a-fd6d84238bf5", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -6829,7 +6856,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "78b7f3ba-e2ae-41c3-9313-e56183400c41", + "jsondocId": "d15fddc9-4fde-48a2-9453-eb08c9ff80b0", "name": "username", "format": "", "description": "", @@ -6838,7 +6865,7 @@ "allowedvalues": [] }, { - "jsondocId": "536e0e34-2ff6-4857-8ecb-8bb32b6f6dea", + "jsondocId": "476b7395-56f5-4f68-b910-fc6ecc498792", "name": "password", "format": "", "description": "", @@ -6847,30 +6874,21 @@ "allowedvalues": [] }, { - "jsondocId": "7cc1774e-3956-40eb-b9e1-18df1535b2be", - "name": "name", - "format": "", - "description": "Suggested name to add", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "3e93daf0-ba4e-4a2a-9cbe-d873e18c4eb7", - "name": "metadata", + "jsondocId": "0517d6a3-7872-4435-bbbe-f0fe11ea7cbe", + "name": "names", "format": "", - "description": "Optional additional information", + "description": "A comma-delimited list of names to add", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Create suggested name", - "methodName": "createName", - "jsondocId": "bb3d913a-1bf0-436a-b9b7-fb3eb90f90ee", + "description": "A comma-delimited list of names", + "methodName": "addNames", + "jsondocId": "b871281c-28e6-46df-bcf4-22a723a50bcf", "bodyobject": { - "jsondocId": "e4725fff-b2f1-42d5-b1da-ba1149521f41", + "jsondocId": "8417a0e8-5181-4cd2-a276-9b09db492d46", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6878,9 +6896,9 @@ "object": "suggested name" }, "apierrors": [], - "path": "/suggestedName/createName", + "path": "/suggestedName/addNames", "response": { - "jsondocId": "5f3b07d9-e5ec-48fa-bdbd-1410ab25af00", + "jsondocId": "f6a8caea-b3bf-4c6e-9f15-84f68055f775", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -6893,7 +6911,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "0b443306-39f9-47d7-9801-32ab745484f6", + "jsondocId": "d38d80c2-f9ae-4560-9821-545b1c5f63db", "name": "username", "format": "", "description": "", @@ -6902,7 +6920,7 @@ "allowedvalues": [] }, { - "jsondocId": "133c45ac-81e9-4785-a177-92d6941e2af2", + "jsondocId": "018127fb-c6ad-430b-9c3e-57de174cba62", "name": "password", "format": "", "description": "", @@ -6911,48 +6929,30 @@ "allowedvalues": [] }, { - "jsondocId": "6ccb997a-65df-49ba-bc1b-0d0e8995fd19", + "jsondocId": "a168cffa-e83f-4218-b48c-3aebc616654c", "name": "id", "format": "", - "description": "Suggested name ID to update (or specify the old_name)", + "description": "Name ID to show (or specify a name)", "type": "long", "required": "true", "allowedvalues": [] }, { - "jsondocId": "73857169-01d7-4296-9b26-70903b3c4df2", - "name": "old_name", - "format": "", - "description": "Suggested name to update", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "c7f530ee-4e04-4b42-b734-5e88463a47c2", - "name": "new_name", - "format": "", - "description": "Suggested name to change to (the only editable option)", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "ab7e75c7-cefe-441b-a188-0da911bab14c", - "name": "metadata", + "jsondocId": "8e9e9a37-8e09-42d8-aa67-e40f6d7cee49", + "name": "name", "format": "", - "description": "Optional additional information", + "description": "Name to show", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Update suggested name", - "methodName": "updateName", - "jsondocId": "2af5b79d-f907-4193-80f9-a581a8f3e560", + "description": "Returns a JSON array of all suggested names, or optionally, gets information about a specific suggested name", + "methodName": "showName", + "jsondocId": "26960574-fd99-4c20-859b-cc9688b446b5", "bodyobject": { - "jsondocId": "ff53706b-233f-4ec1-8e59-5bab3812a4cb", + "jsondocId": "3b1cdaa3-9d3c-4ada-84f2-08cf38cad978", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -6960,9 +6960,9 @@ "object": "suggested name" }, "apierrors": [], - "path": "/suggestedName/updateName", + "path": "/suggestedName/showName", "response": { - "jsondocId": "2b7154e1-56b6-41a2-99a7-6825356679fa", + "jsondocId": "5ed32e1f-f09e-4acd-86ac-8a9908726da8", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -6975,7 +6975,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "540eab30-14e7-4836-8a62-6a60ba883be8", + "jsondocId": "c2194b45-6ed4-4bff-b1ca-5f16d5415ab2", "name": "username", "format": "", "description": "", @@ -6984,7 +6984,7 @@ "allowedvalues": [] }, { - "jsondocId": "8c5d35df-4f72-496e-aac9-780bd1e16a02", + "jsondocId": "4b62ef96-696b-4266-9ec1-9d4248e0659d", "name": "password", "format": "", "description": "", @@ -6993,30 +6993,30 @@ "allowedvalues": [] }, { - "jsondocId": "d10b5925-d3bf-4b1d-8727-72731887bc09", - "name": "id", + "jsondocId": "e148c11b-eb27-48b2-a557-6e5b02946ff4", + "name": "name", "format": "", - "description": "Suggested name ID to remove (or specify the name)", - "type": "long", + "description": "Suggested name to add", + "type": "string", "required": "true", "allowedvalues": [] }, { - "jsondocId": "ae25830c-beb7-4d2d-9cd6-df0969f58c98", - "name": "name", + "jsondocId": "4026988f-cae2-40d0-8c96-661f47b7e8ae", + "name": "metadata", "format": "", - "description": "Suggested name to delete", + "description": "Optional additional information", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Remove a suggested name", - "methodName": "deleteName", - "jsondocId": "2f7243c5-6b44-4c48-81d7-134ab34fe88d", + "description": "Create suggested name", + "methodName": "createName", + "jsondocId": "072f89c6-41c9-45f3-9b27-a8cfb5e7029a", "bodyobject": { - "jsondocId": "049ddc62-6dc2-4376-b264-ec5c3e65c4e1", + "jsondocId": "a7641131-e387-4082-8fa8-1e9ade0a4e0a", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7024,9 +7024,9 @@ "object": "suggested name" }, "apierrors": [], - "path": "/suggestedName/deleteName", + "path": "/suggestedName/createName", "response": { - "jsondocId": "1d31a2c2-e411-4660-a969-f253e67a6955", + "jsondocId": "af0add1e-a1e7-4485-8fa3-c31089240e23", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -7039,7 +7039,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "af7bdf7f-8f8d-4b9b-80c6-79d8a6677730", + "jsondocId": "3360cb78-ca36-4b1a-a8e6-ce8d86848c59", "name": "username", "format": "", "description": "", @@ -7048,7 +7048,7 @@ "allowedvalues": [] }, { - "jsondocId": "62cef5cc-aacf-49a0-896d-cd79e3d40c50", + "jsondocId": "8fe142fd-c7cb-4206-a56d-34e81018c31e", "name": "password", "format": "", "description": "", @@ -7057,30 +7057,48 @@ "allowedvalues": [] }, { - "jsondocId": "50e3e672-9f2f-41c0-9b50-4e2162c4bdf5", + "jsondocId": "3536b57b-c751-44db-9d3b-aad3e9f462dd", "name": "id", "format": "", - "description": "Name ID to show (or specify a name)", + "description": "Suggested name ID to update (or specify the old_name)", "type": "long", "required": "true", "allowedvalues": [] }, { - "jsondocId": "5671233e-3339-42d7-b436-a8b86910c78c", - "name": "name", + "jsondocId": "fea93686-cbcc-4833-89b9-0a7f593681aa", + "name": "old_name", "format": "", - "description": "Name to show", + "description": "Suggested name to update", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "0e5bf2c1-d336-4130-83ee-7933bc02405d", + "name": "new_name", + "format": "", + "description": "Suggested name to change to (the only editable option)", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "75096533-cdbc-453a-979f-c87c92aa8cdf", + "name": "metadata", + "format": "", + "description": "Optional additional information", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "Returns a JSON array of all suggested names, or optionally, gets information about a specific suggested name", - "methodName": "showName", - "jsondocId": "289de6c5-d583-436e-9fbe-64b4e40615c7", + "description": "Update suggested name", + "methodName": "updateName", + "jsondocId": "98e5ab8d-5ba7-493d-9476-7414a0dedf99", "bodyobject": { - "jsondocId": "8c2207f3-9543-4f50-ab57-67ba5ba90269", + "jsondocId": "77bde021-7d85-49b3-85c0-71a02115bc1c", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7088,9 +7106,9 @@ "object": "suggested name" }, "apierrors": [], - "path": "/suggestedName/showName", + "path": "/suggestedName/updateName", "response": { - "jsondocId": "b9298302-8e9c-465f-b353-43bf54c70569", + "jsondocId": "7ea95ccf-4d75-4584-ba3d-75b0848749cf", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -7103,7 +7121,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "be0a8a45-76f6-49f8-82eb-d765f38f5d09", + "jsondocId": "609667ef-5c4c-4471-b2b1-bcb850617df3", "name": "username", "format": "", "description": "", @@ -7112,7 +7130,7 @@ "allowedvalues": [] }, { - "jsondocId": "1330acca-4c03-4dd4-bada-79568d2b017f", + "jsondocId": "5c8b0d26-54d5-4983-8631-b9563d03f79b", "name": "password", "format": "", "description": "", @@ -7121,21 +7139,30 @@ "allowedvalues": [] }, { - "jsondocId": "20d76b4a-2ef1-40ce-9066-33788e94c230", - "name": "names", + "jsondocId": "d7acf38b-f081-41b9-bcb6-18dc2e252b95", + "name": "id", "format": "", - "description": "A comma-delimited list of names to add", + "description": "Suggested name ID to remove (or specify the name)", + "type": "long", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "5099cb10-cdcc-40fb-8007-8234753732f8", + "name": "name", + "format": "", + "description": "Suggested name to delete", "type": "string", "required": "true", "allowedvalues": [] } ], "verb": "POST", - "description": "A comma-delimited list of names", - "methodName": "addNames", - "jsondocId": "480daf02-8bc8-4754-b5ea-d6ee3daf0344", + "description": "Remove a suggested name", + "methodName": "deleteName", + "jsondocId": "5ddef5c3-48b5-4ee3-8be0-a6fcdc6b7a11", "bodyobject": { - "jsondocId": "0b2bac30-8eb4-406e-95f5-fb85a2c4a0e7", + "jsondocId": "a98d58f9-8a09-470d-a3b1-a4e251e39342", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7143,9 +7170,9 @@ "object": "suggested name" }, "apierrors": [], - "path": "/suggestedName/addNames", + "path": "/suggestedName/deleteName", "response": { - "jsondocId": "8f55e250-5a98-4d65-847b-bf598d47ba4d", + "jsondocId": "b3c020de-3f31-4c26-8dd6-5c36a035270a", "mapValueObject": "", "mapKeyObject": "", "object": "suggested name" @@ -7158,13 +7185,13 @@ "description": "Methods for managing suggested names" }, { - "jsondocId": "49d19433-f490-47de-a017-334713180876", + "jsondocId": "8b573ad7-4c1d-4dc3-85a0-b8634cc85aee", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [{ - "jsondocId": "2c9e80c8-e27a-4bec-9aa4-da4f9f651c73", + "jsondocId": "a36eea7b-2e16-412c-a384-cea67b09dd3a", "name": "organismName", "format": "", "description": "Organism common name (required) or 'ALL' if admin", @@ -7175,12 +7202,12 @@ "verb": "GET", "description": "Remove track cache for an organism", "methodName": "clearOrganismCache", - "jsondocId": "aee4190a-718c-4550-86d6-8ded431cb0e2", + "jsondocId": "76c5ab0a-bb13-4e01-9f5d-5a961c7b3d52", "bodyobject": null, "apierrors": [], "path": "/track/cache/clear/", "response": { - "jsondocId": "df134313-75d7-43ed-bd16-4482cf9214f7", + "jsondocId": "b1f3addb-2662-454b-bde1-271b760bc1af", "mapValueObject": "", "mapKeyObject": "", "object": "track" @@ -7193,7 +7220,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "ce13743c-6f4e-4a6c-8189-08d2c2422ff5", + "jsondocId": "2648edfe-0de5-4f78-9c0e-abcfc2fcdc19", "name": "organismName", "format": "", "description": "Organism common name (required)", @@ -7202,7 +7229,7 @@ "allowedvalues": [] }, { - "jsondocId": "5d591253-8485-4a23-855e-ab8f13a4825b", + "jsondocId": "a0b00006-d06d-4aaf-a19a-e9357e1c88f5", "name": "trackName", "format": "", "description": "Track name (required)", @@ -7214,12 +7241,12 @@ "verb": "GET", "description": "Remove track cache for an organism and track", "methodName": "clearTrackCache", - "jsondocId": "fffde92d-06dc-452c-a234-156249346c85", + "jsondocId": "d6f8622c-4972-4296-8b08-4da108bcecf6", "bodyobject": null, "apierrors": [], "path": "/track/cache/clear//", "response": { - "jsondocId": "733530bf-616b-4efa-a1ce-7b5e45d8f7bb", + "jsondocId": "fd286dfc-832c-4ba3-a321-33a65cd1f1f2", "mapValueObject": "", "mapKeyObject": "", "object": "track" @@ -7231,7 +7258,7 @@ "headers": [], "pathparameters": [], "queryparameters": [{ - "jsondocId": "ec792a89-fae9-4e72-8a75-c8caed2f1012", + "jsondocId": "80c7faf0-2b9e-47f0-9ea7-b2ea248bf60b", "name": "organismName", "format": "", "description": "Organism common name (required)", @@ -7242,12 +7269,12 @@ "verb": "GET", "description": "List all tracks for an organism", "methodName": "getTracks", - "jsondocId": "90c33b50-9bb6-41ad-99b1-921e6cae3a29", + "jsondocId": "a398e3fd-b763-4e6e-b778-af40d1c8c19e", "bodyobject": null, "apierrors": [], "path": "/track/list/", "response": { - "jsondocId": "dbf6d25a-4a77-4996-8865-cb0f656fdc64", + "jsondocId": "248356ce-ef39-4b57-a431-650c2a1ff50c", "mapValueObject": "", "mapKeyObject": "", "object": "track" @@ -7260,7 +7287,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "1e49840b-a0af-4b1c-bd5d-3de87a7126a6", + "jsondocId": "71853c11-c2ce-4741-a215-3de9b6c206b6", "name": "organismString", "format": "", "description": "Organism common name or ID(required)", @@ -7269,7 +7296,7 @@ "allowedvalues": [] }, { - "jsondocId": "4d969279-5d8f-4be3-9c74-4f3f54ca5c7d", + "jsondocId": "262e9a15-e677-46ed-9357-eb51ae176806", "name": "trackName", "format": "", "description": "Track name(required)", @@ -7278,7 +7305,7 @@ "allowedvalues": [] }, { - "jsondocId": "3ef01b2c-90a2-4832-8d99-6f77269badbc", + "jsondocId": "847ad889-f888-424d-9249-fa97afd97cbc", "name": "sequence", "format": "", "description": "Sequence name(required)", @@ -7287,7 +7314,7 @@ "allowedvalues": [] }, { - "jsondocId": "cec1db33-6124-4edd-8325-169716c2eaff", + "jsondocId": "5a71d054-8e92-4759-bd29-0d99a1666490", "name": "featureName", "format": "", "description": "If top-level feature 'id' matches, then annotate with 'selected'=1", @@ -7296,7 +7323,7 @@ "allowedvalues": [] }, { - "jsondocId": "d398f220-a52b-4237-a1cf-5e843461c6db", + "jsondocId": "fb5d67b7-4fd5-4637-a3e3-3bcf09a1a65d", "name": "ignoreCache", "format": "", "description": "(default false). Use cache for request if available.", @@ -7305,7 +7332,7 @@ "allowedvalues": [] }, { - "jsondocId": "69431f00-ed7a-4962-8809-09f8ebcd742e", + "jsondocId": "957e22a1-b554-4117-b33f-df2998b9dc37", "name": "flatten", "format": "", "description": "Brings nested top-level components to the root level. If not provided or 'false' it will not flatten. Default is 'gene'.", @@ -7314,7 +7341,7 @@ "allowedvalues": [] }, { - "jsondocId": "948f99c3-ad93-4225-91f8-e6cd7d5399e4", + "jsondocId": "02e84d93-2ff5-40d7-8d7a-c33f47e2d14a", "name": "type", "format": "", "description": ".json or .svg", @@ -7326,12 +7353,12 @@ "verb": "GET", "description": "Get track data as an JSON within but only for the selected name", "methodName": "featuresByName", - "jsondocId": "592b9122-d89e-4cf1-8c41-8439b263b322", + "jsondocId": "8876172f-0581-4bcb-96a4-0f38db5fecf5", "bodyobject": null, "apierrors": [], "path": "/track////.?ignoreCache=", "response": { - "jsondocId": "2815ef0b-0c85-45e6-b474-9597e394e6a4", + "jsondocId": "fc3b3189-78d3-4bf2-b393-178cd8e26e71", "mapValueObject": "", "mapKeyObject": "", "object": "track" @@ -7344,7 +7371,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "53ae217d-a69f-41a3-a769-9c08f105f6ba", + "jsondocId": "c71fb678-13b4-4284-bb22-176a2f0cb46f", "name": "organismString", "format": "", "description": "Organism common name or ID(required)", @@ -7353,7 +7380,7 @@ "allowedvalues": [] }, { - "jsondocId": "b167f4a8-2353-4c13-b26b-313392bcc4da", + "jsondocId": "1b7e30f3-6c54-432c-b332-a1abb4dcb0ef", "name": "trackName", "format": "", "description": "Track name(required)", @@ -7362,7 +7389,7 @@ "allowedvalues": [] }, { - "jsondocId": "6c328f59-5ab2-4b92-a893-6026469cb2b6", + "jsondocId": "495872b1-138a-4c50-b466-899532610a29", "name": "sequence", "format": "", "description": "Sequence name(required)", @@ -7371,7 +7398,7 @@ "allowedvalues": [] }, { - "jsondocId": "112fa271-67f9-4871-9b76-f1c536a0b02f", + "jsondocId": "053eeb4f-8967-4b8d-8b3b-4cfc0bc4fb04", "name": "fmin", "format": "", "description": "Minimum range(required)", @@ -7380,7 +7407,7 @@ "allowedvalues": [] }, { - "jsondocId": "2b34f64b-dec4-49f4-b570-da90b50028c2", + "jsondocId": "ca0f8ec4-51f3-4508-bbe1-b10a54906f00", "name": "fmax", "format": "", "description": "Maximum range (required)", @@ -7389,7 +7416,7 @@ "allowedvalues": [] }, { - "jsondocId": "dbb7f758-82d2-40c3-aa7a-f71ebdd59acb", + "jsondocId": "e390a5ff-d0bc-4e2f-8fcb-3c3639495ac6", "name": "name", "format": "", "description": "If top-level feature 'name' matches, then annotate with 'selected'=true. Multiple names can be passed in.", @@ -7398,7 +7425,7 @@ "allowedvalues": [] }, { - "jsondocId": "563942ba-b850-4b10-96aa-610730025890", + "jsondocId": "3972f206-08b0-4188-a910-13457c74a7b3", "name": "onlySelected", "format": "", "description": "(default false). If 'selected'!=1 one, then exclude.", @@ -7407,7 +7434,7 @@ "allowedvalues": [] }, { - "jsondocId": "33ff98c6-9b2e-4907-a2d0-eaee7cdb449a", + "jsondocId": "e9421d2c-42fe-4ed5-bfdd-05df981f56e2", "name": "ignoreCache", "format": "", "description": "(default false). Use cache for request if available.", @@ -7416,7 +7443,7 @@ "allowedvalues": [] }, { - "jsondocId": "fd658044-fdb7-40e1-b457-39b7252fe226", + "jsondocId": "f3343240-34ce-4d00-8087-321855d2e191", "name": "flatten", "format": "", "description": "Brings nested top-level components to the root level. If not provided or 'false' it will not flatten. Default is 'gene'.", @@ -7425,7 +7452,7 @@ "allowedvalues": [] }, { - "jsondocId": "12d9874e-2aef-413a-8273-b4739fee3b5b", + "jsondocId": "c2bbaeb0-7a9c-4c00-a56b-e9670a60482c", "name": "type", "format": "", "description": ".json or .svg", @@ -7437,12 +7464,12 @@ "verb": "GET", "description": "Get track data as an JSON within an range", "methodName": "featuresByLocation", - "jsondocId": "8f7ceeff-06a3-47cd-852d-81fcdf929d38", + "jsondocId": "0b384e7c-a579-4a9e-a30a-9984d26c9b57", "bodyobject": null, "apierrors": [], "path": "/track///:...?name=&onlySelected=&ignoreCache=", "response": { - "jsondocId": "ec926dff-bdfe-44f4-b01d-7225ba5915d9", + "jsondocId": "fe35cccc-a6ee-4684-aaca-d8e61877fb83", "mapValueObject": "", "mapKeyObject": "", "object": "track" @@ -7455,14 +7482,132 @@ "description": "Methods for retrieving track data" }, { - "jsondocId": "dd366310-b3cd-4472-8a02-2681fc9b779d", + "jsondocId": "3ddf469e-bd50-459f-986a-a50cd868f515", "methods": [ { "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "29581468-6f49-4145-93dc-9c309dc482ba", + "jsondocId": "d340b9f1-f646-4f04-a4be-93daf3489268", + "name": "username", + "format": "", + "description": "", + "type": "email", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "a640446d-63cd-435e-bcad-8e085146d5f8", + "name": "password", + "format": "", + "description": "", + "type": "password", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "b8c73593-24f2-4f54-8af4-f52d2a754ec8", + "name": "userId", + "format": "", + "description": "User ID to modify permissions for", + "type": "long", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "5f15aa48-9a9e-4a3a-8495-c6578cc71275", + "name": "user", + "format": "", + "description": "(Optional) user email of the user to modify permissions for if User ID is not provided", + "type": "email", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "c7e1826d-2566-44ef-850e-eac0d1f3b909", + "name": "organism", + "format": "", + "description": "Name of organism to update", + "type": "string", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "556f62ad-332e-4db5-b0ea-902c80fbf3ba", + "name": "id", + "format": "", + "description": "Permission ID to update (can get from userId/organism instead)", + "type": "long", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "47cfb026-3ad4-4042-a0c0-697654d61a81", + "name": "ADMINISTRATE", + "format": "", + "description": "Indicate if user has administrative and all lesser (including user/group) privileges for the organism", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "dfe3f335-902e-4535-97e9-e55db7cf8170", + "name": "WRITE", + "format": "", + "description": "Indicate if user has write and all lesser privileges for the organism", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "82a56b7a-a618-4090-9b65-b9e6c6fdc169", + "name": "EXPORT", + "format": "", + "description": "Indicate if user has export and all lesser privileges for the organism", + "type": "boolean", + "required": "true", + "allowedvalues": [] + }, + { + "jsondocId": "8fb755c1-c416-459c-9581-93bb3d0a9140", + "name": "READ", + "format": "", + "description": "Indicate if user has read and all lesser privileges for the organism", + "type": "boolean", + "required": "true", + "allowedvalues": [] + } + ], + "verb": "POST", + "description": "Update organism permissions", + "methodName": "updateOrganismPermission", + "jsondocId": "caf3bbb4-6e9b-4457-b25f-ce26983911e6", + "bodyobject": { + "jsondocId": "d2e489bd-eea7-4bea-b1ef-26764f6b1d63", + "mapValueObject": "", + "mapKeyObject": "", + "multiple": "Unknow", + "map": "", + "object": "user" + }, + "apierrors": [], + "path": "/user/updateOrganismPermission", + "response": { + "jsondocId": "61ec6e50-45e9-4a5c-9317-7b4a35018020", + "mapValueObject": "", + "mapKeyObject": "", + "object": "user" + }, + "produces": ["application/json"], + "consumes": ["application/json"] + }, + { + "headers": [], + "pathparameters": [], + "queryparameters": [ + { + "jsondocId": "b4524c4a-ac19-43eb-bcfc-1f0f96be2528", "name": "username", "format": "", "description": "", @@ -7471,7 +7616,7 @@ "allowedvalues": [] }, { - "jsondocId": "f675ba8d-7407-4996-85c4-1fc02068370d", + "jsondocId": "7f6a57d9-fd52-4ed3-a58f-ae7a936e4ac5", "name": "password", "format": "", "description": "", @@ -7480,7 +7625,7 @@ "allowedvalues": [] }, { - "jsondocId": "b518cc86-96be-4990-9c3b-5376eddcabfe", + "jsondocId": "d067718b-1fe8-4ce5-a344-39cfa90829a7", "name": "userId", "format": "", "description": "User ID to fetch", @@ -7492,9 +7637,9 @@ "verb": "POST", "description": "Get organism permissions for user, returns an array of permission objects", "methodName": "getOrganismPermissionsForUser", - "jsondocId": "da0773b8-339e-4623-9b52-7460cabdd29b", + "jsondocId": "af96fccb-43c3-4c15-b0c6-062ccf6d3803", "bodyobject": { - "jsondocId": "2b21998d-2185-4c1b-960d-80257df12fde", + "jsondocId": "d84fe205-0b4a-4651-be1c-c83bfff87ecd", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7504,7 +7649,7 @@ "apierrors": [], "path": "/user/getOrganismPermissionsForUser", "response": { - "jsondocId": "ff73ae7b-3b96-4da3-9edb-c9d9206e5704", + "jsondocId": "dd342868-5659-44f5-b8db-26f6e4c2ee05", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7517,7 +7662,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "74cef1ad-1403-4988-bafd-b35d807e8112", + "jsondocId": "59eea8ae-7ad5-4e0d-a6d6-268c68c0978f", "name": "username", "format": "", "description": "", @@ -7526,7 +7671,7 @@ "allowedvalues": [] }, { - "jsondocId": "bdccb126-0146-462a-b086-a558d2416a97", + "jsondocId": "4f8e7d87-4102-47b6-9fa7-1f564702d58b", "name": "password", "format": "", "description": "", @@ -7535,7 +7680,7 @@ "allowedvalues": [] }, { - "jsondocId": "ca1f1dcf-9c74-4042-bb5c-d27792c285ab", + "jsondocId": "70b0f182-7776-4e48-ba33-52d54fa42ab2", "name": "userId", "format": "", "description": "Optionally only user a specific userId as an integer database id or a username string", @@ -7544,7 +7689,7 @@ "allowedvalues": [] }, { - "jsondocId": "abad232a-6605-459a-9a66-d6177a47383a", + "jsondocId": "d7ecc398-3566-4816-9d58-001d8814b141", "name": "start", "format": "", "description": "(optional) Result start / offset", @@ -7553,7 +7698,7 @@ "allowedvalues": [] }, { - "jsondocId": "06459035-aa76-4e26-8544-36d5b4e5616d", + "jsondocId": "ef696b28-fd5b-4e2e-87e6-7dd757cdd18d", "name": "length", "format": "", "description": "(optional) Result length", @@ -7562,7 +7707,7 @@ "allowedvalues": [] }, { - "jsondocId": "3eef63ed-50b3-4b91-beba-9c91b2b8533d", + "jsondocId": "80852c5e-915d-4ee3-88a6-8cc269082c7d", "name": "name", "format": "", "description": "(optional) Search name", @@ -7571,7 +7716,7 @@ "allowedvalues": [] }, { - "jsondocId": "e47855d7-9895-4989-8d02-43468adc0106", + "jsondocId": "559af546-7f3e-4aa6-ba7f-8507ec919c8b", "name": "sortColumn", "format": "", "description": "(optional) Sort column, default 'name'", @@ -7580,7 +7725,7 @@ "allowedvalues": [] }, { - "jsondocId": "90358ed8-ef09-43aa-b2be-842834abb552", + "jsondocId": "3967850b-bbe2-4a70-8a9c-401f6de108e7", "name": "sortAscending", "format": "", "description": "(optional) Sort column is ascending if true (default false)", @@ -7589,7 +7734,7 @@ "allowedvalues": [] }, { - "jsondocId": "670b72a5-9173-406e-970b-1229e4f62b15", + "jsondocId": "1b0e98e5-cc86-4780-a926-b7b2d612a939", "name": "omitEmptyOrganisms", "format": "", "description": "(optional) Omits empty organism permissions from return (default false)", @@ -7598,7 +7743,7 @@ "allowedvalues": [] }, { - "jsondocId": "e2e21c4f-eb45-4968-87ec-ab0b4e5a35c1", + "jsondocId": "7da8b0d6-2072-4a2d-bd1d-0c56fda7ad82", "name": "showInactiveUsers", "format": "", "description": "(optional) Shows inactive users without permissions (default false)", @@ -7610,9 +7755,9 @@ "verb": "POST", "description": "Load all users and their permissions", "methodName": "loadUsers", - "jsondocId": "667e3900-1f97-4e3c-baa3-db68aef6574c", + "jsondocId": "9c0f52ea-68f6-4881-9098-fc9dce311fd9", "bodyobject": { - "jsondocId": "5c5c22a5-c1cf-4251-b812-73109eaf75af", + "jsondocId": "84621fe4-2532-4f21-a6b4-acd114c1b29b", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7622,7 +7767,7 @@ "apierrors": [], "path": "/user/loadUsers", "response": { - "jsondocId": "8932fd5c-042e-41d1-aafb-249a188d134b", + "jsondocId": "0b759d7f-3eec-4a8d-aded-9e95fa0d25ca", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7635,7 +7780,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "4c822a5b-dff1-4d3c-854b-7ac1121aa0d5", + "jsondocId": "b4d14212-8ab4-4462-8a15-20794eba5350", "name": "username", "format": "", "description": "", @@ -7644,7 +7789,7 @@ "allowedvalues": [] }, { - "jsondocId": "1cf5f2b2-d0bd-4fb0-a84b-216e47bc0310", + "jsondocId": "b895385b-c787-4af8-ba20-8900f57b6834", "name": "password", "format": "", "description": "", @@ -7653,7 +7798,7 @@ "allowedvalues": [] }, { - "jsondocId": "899c808b-f45e-438a-b872-e0fb147eb969", + "jsondocId": "c615f865-fb96-43d8-885b-d7acbbac5160", "name": "group", "format": "", "description": "Group name", @@ -7662,7 +7807,7 @@ "allowedvalues": [] }, { - "jsondocId": "ce800603-8fb8-4f39-95ff-28d7f53abaa4", + "jsondocId": "25b0364a-a62c-473d-add4-ad5541fe9984", "name": "userId", "format": "", "description": "User id", @@ -7671,7 +7816,7 @@ "allowedvalues": [] }, { - "jsondocId": "2ee5a726-4094-408a-9366-09d83f0abe3b", + "jsondocId": "bae2fe3d-877c-445c-987f-987f701bb3ef", "name": "user", "format": "", "description": "User email/username (supplied if user id unknown)", @@ -7683,9 +7828,9 @@ "verb": "POST", "description": "Add user to group", "methodName": "addUserToGroup", - "jsondocId": "d89928cd-3018-4c39-8f07-8cace180dfef", + "jsondocId": "ab400d2d-d79f-416a-bfd3-f879f60bab4d", "bodyobject": { - "jsondocId": "3d750fd5-4d24-4108-af5f-5a86aacd9671", + "jsondocId": "6c81aa3d-5704-4156-bfb8-c228b44fef8c", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7695,7 +7840,7 @@ "apierrors": [], "path": "/user/addUserToGroup", "response": { - "jsondocId": "173a12f3-ebeb-4167-91df-2246817a5b21", + "jsondocId": "e9d4c467-b642-4411-80ee-f7e03537dc6d", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7708,7 +7853,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "0db97dc3-8e43-4280-b429-b2ffbdbb2924", + "jsondocId": "c7c3323a-3061-4b38-a286-9b7ed297c25f", "name": "username", "format": "", "description": "", @@ -7717,7 +7862,7 @@ "allowedvalues": [] }, { - "jsondocId": "a1370bd9-559b-481c-9f70-5fa16619b1b7", + "jsondocId": "12da8583-7099-4c1b-8481-8bc387e2f600", "name": "password", "format": "", "description": "", @@ -7726,7 +7871,7 @@ "allowedvalues": [] }, { - "jsondocId": "0176fc75-18c1-43ed-84c2-c5754202b816", + "jsondocId": "cd768307-4b33-4fde-9ab2-43a01fc180bd", "name": "group", "format": "", "description": "Group name", @@ -7735,7 +7880,7 @@ "allowedvalues": [] }, { - "jsondocId": "823c362d-82b1-437a-8705-2f10d2a2d266", + "jsondocId": "774441ae-799a-443b-981d-b92fe7060b69", "name": "userId", "format": "", "description": "User id", @@ -7744,7 +7889,7 @@ "allowedvalues": [] }, { - "jsondocId": "3fa0da61-ec1e-4de5-bd3b-b40cd4b5206e", + "jsondocId": "1671de4e-191e-4279-9be6-411585e94cc2", "name": "user", "format": "", "description": "User email/username (supplied if user id unknown)", @@ -7756,9 +7901,9 @@ "verb": "POST", "description": "Remove user from group", "methodName": "removeUserFromGroup", - "jsondocId": "4d3ce667-e9f9-4226-9523-9b8af305233f", + "jsondocId": "663bc9a7-76da-45c1-8b7e-0a2108cd111d", "bodyobject": { - "jsondocId": "04735058-aed1-40c9-9d5d-adcd87c267b7", + "jsondocId": "567d79ad-baef-4478-b998-33864508b992", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7768,7 +7913,7 @@ "apierrors": [], "path": "/user/removeUserFromGroup", "response": { - "jsondocId": "dd023177-e889-4685-991c-15589cca2fb0", + "jsondocId": "7c780b4f-431f-4efa-bc74-dd3868b4b215", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7781,7 +7926,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "de9974b0-0de9-415a-8d43-3afd89454045", + "jsondocId": "01a36e5d-869f-4abc-a51d-26353e26176a", "name": "username", "format": "", "description": "", @@ -7790,7 +7935,7 @@ "allowedvalues": [] }, { - "jsondocId": "50a46394-6cab-47fd-afa8-137a962821bb", + "jsondocId": "d56b6895-59c4-4f57-9860-f31cafd965e2", "name": "password", "format": "", "description": "", @@ -7799,7 +7944,7 @@ "allowedvalues": [] }, { - "jsondocId": "a4499c30-6bb8-460c-9db0-56009a093ef2", + "jsondocId": "806b7f81-064e-47f7-bd80-bc6488e6441c", "name": "email", "format": "", "description": "Email of the user to add", @@ -7808,7 +7953,7 @@ "allowedvalues": [] }, { - "jsondocId": "ce87afcf-6f85-48a3-ab88-18da50e08a4b", + "jsondocId": "454d471b-ed1d-49dc-8dde-1d1cad1ac632", "name": "firstName", "format": "", "description": "First name of user to add", @@ -7817,7 +7962,7 @@ "allowedvalues": [] }, { - "jsondocId": "1dfb346e-77d6-4039-916b-9dd219105149", + "jsondocId": "c9fc9a5b-cdc4-423b-9d4a-31f3b5bf7c61", "name": "lastName", "format": "", "description": "Last name of user to add", @@ -7826,7 +7971,7 @@ "allowedvalues": [] }, { - "jsondocId": "93f065bb-db85-4508-8b90-dc1632ba591d", + "jsondocId": "fb6cf71f-81dc-4933-8a9a-3e6dc925df98", "name": "metadata", "format": "", "description": "User metadata (optional)", @@ -7835,7 +7980,7 @@ "allowedvalues": [] }, { - "jsondocId": "dd1525b0-3cc5-4786-baf0-f00a409c4410", + "jsondocId": "85b74b72-7dc8-469c-9aa6-bd524e3083a4", "name": "role", "format": "", "description": "User role USER / ADMIN (optional: default USER) ", @@ -7844,7 +7989,7 @@ "allowedvalues": [] }, { - "jsondocId": "37ead5c6-059a-4a25-b140-78c4cd4cb23b", + "jsondocId": "26053bf3-9d79-408d-bddd-7f7bec662889", "name": "newPassword", "format": "", "description": "Password of user to add", @@ -7856,9 +8001,9 @@ "verb": "POST", "description": "Create user", "methodName": "createUser", - "jsondocId": "25c542cf-bf64-476b-bed8-5cb0f8977988", + "jsondocId": "af5149fa-45b6-4b9a-a0fb-94b7e0635cba", "bodyobject": { - "jsondocId": "f54c9718-03b6-4cef-b7f9-cbc762b92b3f", + "jsondocId": "3ffcccbb-b7ad-4b0f-9068-7c2a6b833b69", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7868,7 +8013,7 @@ "apierrors": [], "path": "/user/createUser", "response": { - "jsondocId": "8e63abc0-0327-441a-a4c6-a881df1a8fda", + "jsondocId": "0e5db82b-fbb3-4f4f-927c-22e0a81e5b38", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7881,7 +8026,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "ed69c279-728d-45d9-b7af-78f66d4df34f", + "jsondocId": "24c84e1d-3a20-48ae-b90b-33e3dd13b5e2", "name": "username", "format": "", "description": "", @@ -7890,7 +8035,7 @@ "allowedvalues": [] }, { - "jsondocId": "be8f5fe0-f6fc-479a-b457-f4d38076dc99", + "jsondocId": "22b10254-4210-4410-8e41-38856d4017ba", "name": "password", "format": "", "description": "", @@ -7899,7 +8044,7 @@ "allowedvalues": [] }, { - "jsondocId": "dd14b036-c311-4f5e-b82f-da3f6d39b8f3", + "jsondocId": "3ca9a370-93c3-4132-841e-d13c53e0ce1a", "name": "userId", "format": "", "description": "User ID to delete", @@ -7908,7 +8053,7 @@ "allowedvalues": [] }, { - "jsondocId": "bf0f0629-0530-484d-ac97-af5823db29bc", + "jsondocId": "278beccb-9be7-4183-ab7a-7bcfea8c76c1", "name": "userToDelete", "format": "", "description": "Username (email) to inactivate", @@ -7920,9 +8065,9 @@ "verb": "POST", "description": "Inactivate user, removing all permsissions and setting flag", "methodName": "inactivateUser", - "jsondocId": "bff10aa2-a969-4dd3-95fd-f2cdb02f0514", + "jsondocId": "dfd4791d-665e-44fd-8c2b-07be8f91411f", "bodyobject": { - "jsondocId": "3f23aa92-9159-4966-a403-2b30b5b86abf", + "jsondocId": "b053424a-9330-4cd1-b07b-d09678041274", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7932,7 +8077,7 @@ "apierrors": [], "path": "/user/inactivateUser", "response": { - "jsondocId": "c0a6b463-0adb-406d-8b17-809b32992718", + "jsondocId": "7b250299-b094-45b8-bfa8-c6aa6bba7e4c", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -7945,7 +8090,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "56cce27e-6417-4fe5-97d5-1aba58f34ee5", + "jsondocId": "4eb6740a-af62-47a2-a77b-3c1d6292c7ff", "name": "username", "format": "", "description": "", @@ -7954,7 +8099,7 @@ "allowedvalues": [] }, { - "jsondocId": "5ccad7d9-e614-4786-b4bc-5ebe509c2961", + "jsondocId": "0197c953-8c24-47f2-9633-48c6dec8699a", "name": "password", "format": "", "description": "", @@ -7963,7 +8108,7 @@ "allowedvalues": [] }, { - "jsondocId": "e1a3232e-4e9f-41e1-b9e7-65f3b956a114", + "jsondocId": "c7fa476e-cf77-4982-b569-5436c7a84a87", "name": "userId", "format": "", "description": "User ID to delete", @@ -7972,7 +8117,7 @@ "allowedvalues": [] }, { - "jsondocId": "019b94de-aafe-4ef3-947d-6b81b1979dd9", + "jsondocId": "c2e77b1e-226d-4011-9e97-ffdda63ebc67", "name": "userToActivate", "format": "", "description": "Username (email) to inactivate", @@ -7984,9 +8129,9 @@ "verb": "POST", "description": "Activate user", "methodName": "activateUser", - "jsondocId": "27bc44d9-3bea-4d75-b21d-c2d70c56aab9", + "jsondocId": "256a51ee-80e9-498b-9787-f146d2467cb7", "bodyobject": { - "jsondocId": "5524c5aa-8d0c-40df-969a-8ffba70f7be7", + "jsondocId": "72e34994-1980-4be5-b2ee-80f84b5f68f3", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -7996,7 +8141,7 @@ "apierrors": [], "path": "/user/activateUser", "response": { - "jsondocId": "f514eebe-7bfe-40b5-8eba-bedeeb2bb71f", + "jsondocId": "dca826ed-0b3b-4e4e-af18-ec9104d5065e", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -8009,7 +8154,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "2913f8d4-95cf-40aa-9a73-6878a1e58e66", + "jsondocId": "14f6712f-9c85-4a7c-a71c-7b5c289a9b35", "name": "username", "format": "", "description": "", @@ -8018,7 +8163,7 @@ "allowedvalues": [] }, { - "jsondocId": "60ae2f4d-5c0b-4531-bbf9-4ca3f224ed1d", + "jsondocId": "b5e87c33-5dc4-47b7-b68c-0d2be8732785", "name": "password", "format": "", "description": "", @@ -8027,7 +8172,7 @@ "allowedvalues": [] }, { - "jsondocId": "91e5d592-0a3b-41a7-8753-b21d5e89f792", + "jsondocId": "1f2eb4c4-1039-45c4-8b2e-36c4eed21fe1", "name": "userId", "format": "", "description": "User ID to delete", @@ -8036,7 +8181,7 @@ "allowedvalues": [] }, { - "jsondocId": "e22bc346-3be4-46d5-ab76-42a967af57b0", + "jsondocId": "43b2197a-c1dc-4812-93b9-f2d11cc6f717", "name": "userToDelete", "format": "", "description": "Username (email) to delete", @@ -8048,9 +8193,9 @@ "verb": "POST", "description": "Delete user", "methodName": "deleteUser", - "jsondocId": "6bac3015-8981-480d-b15d-0435df124d7c", + "jsondocId": "0c34757c-af55-4636-a732-34fbdb56326c", "bodyobject": { - "jsondocId": "23cc7ada-dea0-4506-8f81-bbd12ac422e4", + "jsondocId": "b0c844eb-eb1b-482d-8bb7-d7a2eecff5ed", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -8060,7 +8205,7 @@ "apierrors": [], "path": "/user/deleteUser", "response": { - "jsondocId": "c24a9d4d-8ac7-4b5c-872a-439508c0d5ca", + "jsondocId": "6fcacce9-4e7d-4990-a00f-5d325c622b35", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -8073,7 +8218,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "69912f6d-418a-4e34-8801-a0a55d186cc5", + "jsondocId": "6aba752b-3cc1-46be-baa2-59137baec641", "name": "username", "format": "", "description": "", @@ -8082,7 +8227,7 @@ "allowedvalues": [] }, { - "jsondocId": "37d3d2c9-0e09-4004-8008-d26899cf53ef", + "jsondocId": "709ed27d-b2e1-49d7-a97b-9c953909ae6f", "name": "password", "format": "", "description": "", @@ -8091,7 +8236,7 @@ "allowedvalues": [] }, { - "jsondocId": "59b8eef4-df52-4f3e-bf31-79491d82eb87", + "jsondocId": "81a46c2b-0b09-4e93-80e4-df170f39430c", "name": "userId", "format": "", "description": "User ID to update", @@ -8100,7 +8245,7 @@ "allowedvalues": [] }, { - "jsondocId": "729bec70-a37b-438d-95c0-b3164a91071d", + "jsondocId": "6757f68b-75c8-44c1-926f-19858ee13556", "name": "email", "format": "", "description": "Email of the user to update", @@ -8109,7 +8254,7 @@ "allowedvalues": [] }, { - "jsondocId": "790e87c7-43dd-4a8c-ab30-6013ab2160e1", + "jsondocId": "69a9aa56-c1ea-47d3-adc8-e847a9aea6f9", "name": "firstName", "format": "", "description": "First name of user to update", @@ -8118,7 +8263,7 @@ "allowedvalues": [] }, { - "jsondocId": "4fac37ba-01bf-4e18-93f4-73a2312a182b", + "jsondocId": "afedebb3-58d1-4a7b-813d-c9480a588a07", "name": "lastName", "format": "", "description": "Last name of user to update", @@ -8127,7 +8272,7 @@ "allowedvalues": [] }, { - "jsondocId": "c619f903-f3c7-461b-a040-bbe596f9f10f", + "jsondocId": "f843c6fa-1ded-473e-92e4-c8ddce5cbca0", "name": "metadata", "format": "", "description": "User metadata (optional)", @@ -8136,7 +8281,7 @@ "allowedvalues": [] }, { - "jsondocId": "1f7bd038-5041-4ac3-b564-2379f41bd2d4", + "jsondocId": "22de98f9-9b13-4375-982b-c82f9f8ba7a4", "name": "newPassword", "format": "", "description": "Password of user to update", @@ -8148,9 +8293,9 @@ "verb": "POST", "description": "Update user", "methodName": "updateUser", - "jsondocId": "b0476d0f-fbf8-4fbe-8e6a-d791dff5e5aa", + "jsondocId": "a7b59868-77e2-4aee-a1a4-e60ec2bd73b8", "bodyobject": { - "jsondocId": "b95c2441-6842-4bfd-ace2-d6d22fe6465f", + "jsondocId": "0431fa1e-15ab-455d-a7c0-8d0f771d2603", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -8160,7 +8305,7 @@ "apierrors": [], "path": "/user/updateUser", "response": { - "jsondocId": "f4afe682-30fb-48d9-8531-7d450d2fb0e5", + "jsondocId": "ac7d071d-8dce-4611-9b0e-9151e231769a", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -8173,7 +8318,7 @@ "pathparameters": [], "queryparameters": [ { - "jsondocId": "938b4ae9-4e31-4858-9bd3-061b1fe775d2", + "jsondocId": "e6f8905f-6ed7-488a-84cf-d3dd9c700e47", "name": "username", "format": "", "description": "", @@ -8182,7 +8327,7 @@ "allowedvalues": [] }, { - "jsondocId": "61c842db-6356-432d-be2f-963a26de2c42", + "jsondocId": "66b3c7fc-52b4-4ece-8715-6aedc655a8b3", "name": "password", "format": "", "description": "", @@ -8191,7 +8336,7 @@ "allowedvalues": [] }, { - "jsondocId": "9f0ddd21-3cda-4bfd-b271-5e091e4bd979", + "jsondocId": "65e751cf-e37c-452d-baad-3946bf8a6e3d", "name": "email", "format": "", "description": "Email of the user", @@ -8203,9 +8348,9 @@ "verb": "POST", "description": "Get creator metadata for user, returns creator userId as JSONObject", "methodName": "getUserCreator", - "jsondocId": "54a78f23-4560-4d7a-8ffe-66a2ca87eade", + "jsondocId": "7e1d2d2f-df6c-4ba3-8b2f-b67a4f9b61de", "bodyobject": { - "jsondocId": "e243c497-8c12-4d81-8e8d-ccdbb1154cbb", + "jsondocId": "4611c352-4d42-423c-924e-1ba9df323a53", "mapValueObject": "", "mapKeyObject": "", "multiple": "Unknow", @@ -8215,125 +8360,7 @@ "apierrors": [], "path": "/user/getUserCreator", "response": { - "jsondocId": "30bc8709-d45d-42ee-8483-a3f4c0724874", - "mapValueObject": "", - "mapKeyObject": "", - "object": "user" - }, - "produces": ["application/json"], - "consumes": ["application/json"] - }, - { - "headers": [], - "pathparameters": [], - "queryparameters": [ - { - "jsondocId": "559bcf26-6035-4cd2-9438-f5e4bce15d12", - "name": "username", - "format": "", - "description": "", - "type": "email", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "fc79c757-e6d0-48bb-918c-a87b13dad48a", - "name": "password", - "format": "", - "description": "", - "type": "password", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "53469921-5b27-4e2e-9fa2-f2001daa72e6", - "name": "userId", - "format": "", - "description": "User ID to modify permissions for", - "type": "long", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "548fb98e-c226-4b50-b900-70b6c2cbd96a", - "name": "user", - "format": "", - "description": "(Optional) user email of the user to modify permissions for if User ID is not provided", - "type": "email", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "01616dbf-aba2-49e4-8dd0-749a9ebd2715", - "name": "organism", - "format": "", - "description": "Name of organism to update", - "type": "string", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "3ee6c4be-8310-422f-80dd-2d9a17302640", - "name": "id", - "format": "", - "description": "Permission ID to update (can get from userId/organism instead)", - "type": "long", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "1afc3f5b-731b-4f61-8fca-b5f7c5e71be9", - "name": "ADMINISTRATE", - "format": "", - "description": "Indicate if user has administrative and all lesser (including user/group) privileges for the organism", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "ea1558d4-be80-4372-ac4c-5653076e5ab4", - "name": "WRITE", - "format": "", - "description": "Indicate if user has write and all lesser privileges for the organism", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "2cb59f96-87ef-4f6a-a9c3-e2ad6fc9af69", - "name": "EXPORT", - "format": "", - "description": "Indicate if user has export and all lesser privileges for the organism", - "type": "boolean", - "required": "true", - "allowedvalues": [] - }, - { - "jsondocId": "444e9197-83a1-4d93-b084-9f3873610d8a", - "name": "READ", - "format": "", - "description": "Indicate if user has read and all lesser privileges for the organism", - "type": "boolean", - "required": "true", - "allowedvalues": [] - } - ], - "verb": "POST", - "description": "Update organism permissions", - "methodName": "updateOrganismPermission", - "jsondocId": "d26b2893-0b88-40f7-a754-a4d944d78387", - "bodyobject": { - "jsondocId": "716017ee-ddce-47a5-bf62-64afbcb378fc", - "mapValueObject": "", - "mapKeyObject": "", - "multiple": "Unknow", - "map": "", - "object": "user" - }, - "apierrors": [], - "path": "/user/updateOrganismPermission", - "response": { - "jsondocId": "2a883599-855d-41ad-8574-19b644d2c8f9", + "jsondocId": "9c457152-1d3b-467b-8b61-503ad355a7ac", "mapValueObject": "", "mapKeyObject": "", "object": "user" @@ -8346,13 +8373,13 @@ "description": "Methods for managing users" }, { - "jsondocId": "41ab2b8d-df25-402b-82d0-ddd76628124e", + "jsondocId": "53c20be0-41ac-476a-a8ee-f6b0438bb083", "methods": [{ "headers": [], "pathparameters": [], "queryparameters": [ { - "jsondocId": "0bf97b88-c554-428b-bf8d-82c8f006dc81", + "jsondocId": "c3d63c71-2eb6-4f5a-8992-24cc9c7c0ef5", "name": "organismString", "format": "", "description": "Organism common name or ID (required)", @@ -8361,7 +8388,7 @@ "allowedvalues": [] }, { - "jsondocId": "8037d12e-a389-4d17-86f0-02c96f44706b", + "jsondocId": "39b8b32e-03d3-43db-ba2b-fe3ac82ffe7a", "name": "trackName", "format": "", "description": "Track name by label in trackList.json (required)", @@ -8370,7 +8397,7 @@ "allowedvalues": [] }, { - "jsondocId": "bcc78568-39e6-4f46-93c6-faf7a1a37a2f", + "jsondocId": "db433222-5218-47fd-b2f5-b4d16e4ea88c", "name": "sequence", "format": "", "description": "Sequence name (required)", @@ -8379,7 +8406,7 @@ "allowedvalues": [] }, { - "jsondocId": "4d6523c7-0725-4adc-8432-8c5363171f29", + "jsondocId": "544575f4-624f-4f94-8553-8d3de617ce32", "name": "fmin", "format": "", "description": "Minimum range (required)", @@ -8388,7 +8415,7 @@ "allowedvalues": [] }, { - "jsondocId": "6cde4788-a11d-4671-8c96-dbb53eaf8473", + "jsondocId": "4c81796d-d40a-4f44-b79a-9f322fc2998a", "name": "fmax", "format": "", "description": "Maximum range (required)", @@ -8397,7 +8424,7 @@ "allowedvalues": [] }, { - "jsondocId": "2d12c823-acfd-45bc-8c1b-6e3473b4e7f5", + "jsondocId": "a05a203e-8947-4a68-8d91-aedade943a60", "name": "type", "format": "", "description": ".json (required)", @@ -8406,7 +8433,7 @@ "allowedvalues": [] }, { - "jsondocId": "298b9757-330b-4109-8bec-6f8dbd272d54", + "jsondocId": "19b87c31-8148-4f80-ae0a-bf43899e9328", "name": "includeGenotypes", "format": "", "description": "(default: false). If true, will include genotypes associated with variants from VCF.", @@ -8415,7 +8442,7 @@ "allowedvalues": [] }, { - "jsondocId": "1e39b471-c57f-4b40-9ee4-ffaf34c0f59a", + "jsondocId": "4258f15c-f706-4665-b75e-5476b26270a1", "name": "ignoreCache", "format": "", "description": "(default: false). Use cache for request, if available.", @@ -8427,12 +8454,12 @@ "verb": "GET", "description": "Get VCF track data for a given range as JSON", "methodName": "featuresByLocation", - "jsondocId": "0ea70e6a-810d-4797-9da8-12066a3e29bd", + "jsondocId": "753012c3-6857-4017-8295-685427c28233", "bodyobject": null, "apierrors": [], "path": "/vcf///:...?includeGenotypes=&ignoreCache=", "response": { - "jsondocId": "58d3a462-fb23-4d8c-9b05-ca03f7529ed9", + "jsondocId": "a073cda8-97e6-4211-af76-e517fd2ee4df", "mapValueObject": "", "mapKeyObject": "", "object": "vcf"