diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml
index e79ba77ade7..00f6aa9fa53 100644
--- a/.github/workflows/develop.yml
+++ b/.github/workflows/develop.yml
@@ -13,23 +13,24 @@ jobs:
with:
maven_opts: -Phdp3.1,RClient -Dopencga.war.name=opencga -Dcheckstyle.skip
- test:
- uses: ./.github/workflows/test-analysis.yml
- needs: build
- with:
- test_profile: runShortTests,runMediumTests
- secrets: inherit
+## TASK-4970: remove the test job from the develop.yml workflow because it is not needed anymore.
+# test:
+# uses: ./.github/workflows/test-analysis.yml
+# needs: build
+# with:
+# test_profile: runShortTests,runMediumTests
+# secrets: inherit
deploy-maven:
uses: opencb/java-common-libs/.github/workflows/deploy-maven-repository-workflow.yml@develop
- needs: test
+ needs: build
with:
maven_opts: -P hdp3.1 -Dopencga.war.name=opencga
secrets: inherit
deploy-docker:
uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop
- needs: test
+ needs: build
with:
cli: python3 ./build/cloud/docker/docker-build.py push --images base,init
secrets: inherit
diff --git a/.github/workflows/docker-aws-emr.yml b/.github/workflows/docker-aws-emr.yml
deleted file mode 100644
index 392514a9a9b..00000000000
--- a/.github/workflows/docker-aws-emr.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Release new AWS EMR OpenCGA version
-
-on:
- push:
- tags:
- - '*'
- workflow_dispatch:
-
-jobs:
- build:
- uses: opencb/java-common-libs/.github/workflows/build-java-app-workflow.yml@develop
- with:
- maven_opts: -Pemr6.1 -Dopencga.war.name=opencga
-
- deploy-docker:
- uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop
- needs: build
- with:
- cli: python3 ./build/cloud/docker/docker-build.py push --images base,init
- secrets: inherit
diff --git a/.github/workflows/long-test-analysis.yml b/.github/workflows/long-test-analysis.yml
index e0c14b79175..10fdee5a0c3 100644
--- a/.github/workflows/long-test-analysis.yml
+++ b/.github/workflows/long-test-analysis.yml
@@ -14,8 +14,8 @@ jobs:
matrix:
hadoop: [ "hdp3.1", "hdi5.1", "emr6.1", "emr6.13" ]
uses: ./.github/workflows/test-analysis.yml
- secrets: inherit
with:
test_profile: runShortTests,runMediumTests,runLongTests
hadoop: ${{ matrix.hadoop }}
+ secrets: inherit
diff --git a/.github/workflows/manual-deploy-docker.yml b/.github/workflows/manual-deploy-docker.yml
index 69472345e83..3ee65923466 100644
--- a/.github/workflows/manual-deploy-docker.yml
+++ b/.github/workflows/manual-deploy-docker.yml
@@ -51,10 +51,9 @@ jobs:
name: build-folder
path: build
-
deploy-docker:
uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop
needs: build
with:
cli: python3 ./build/cloud/docker/docker-build.py push --images base,init --tag ${{ inputs.tag }}
- secrets: inherit
\ No newline at end of file
+ secrets: inherit
diff --git a/.github/workflows/manual-deploy-ext-tools.yml b/.github/workflows/manual-deploy-ext-tools.yml
index 63e61914ea0..b614a520caf 100644
--- a/.github/workflows/manual-deploy-ext-tools.yml
+++ b/.github/workflows/manual-deploy-ext-tools.yml
@@ -46,11 +46,9 @@ jobs:
name: build-folder
path: build
-
deploy-docker-ext-tools:
uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop
needs: build
with:
cli: python3 ./build/cloud/docker/docker-build.py push --images ext-tools --tag ${{ inputs.tag }}
secrets: inherit
-
diff --git a/.github/workflows/pull-request-approved.yml b/.github/workflows/pull-request-approved.yml
new file mode 100644
index 00000000000..753466dd67a
--- /dev/null
+++ b/.github/workflows/pull-request-approved.yml
@@ -0,0 +1,19 @@
+name: Pull request approve workflow
+
+on:
+ pull_request_review:
+ types: [submitted]
+
+jobs:
+ build:
+ uses: opencb/java-common-libs/.github/workflows/build-java-app-workflow.yml@develop
+ with:
+ maven_opts: -Phdp3.1,RClient -Dopencga.war.name=opencga -Dcheckstyle.skip
+
+ test:
+ name: "Run all tests before merging, ie. short, medium and long tests."
+ uses: ./.github/workflows/test-analysis.yml
+ needs: build
+ with:
+ test_profile: runShortTests,runMediumTests,runLongTests
+ secrets: inherit
diff --git a/.github/workflows/pull-request-merge.yml b/.github/workflows/pull-request-merged.yml
similarity index 100%
rename from .github/workflows/pull-request-merge.yml
rename to .github/workflows/pull-request-merged.yml
diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml
index f27e7ce3b7f..cc8470b747a 100644
--- a/.github/workflows/task.yml
+++ b/.github/workflows/task.yml
@@ -17,9 +17,9 @@ jobs:
test:
uses: ./.github/workflows/test-analysis.yml
needs: build
- secrets: inherit
with:
test_profile: runShortTests
+ secrets: inherit
deploy-docker:
uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop
diff --git a/.github/workflows/test-analysis.yml b/.github/workflows/test-analysis.yml
index bb48ccd4b40..554e1f72520 100644
--- a/.github/workflows/test-analysis.yml
+++ b/.github/workflows/test-analysis.yml
@@ -38,7 +38,7 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
- fetch-depth: '0'
+ fetch-depth: '10'
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
@@ -65,7 +65,7 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
- fetch-depth: '0'
+ fetch-depth: '10'
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
@@ -90,8 +90,8 @@ jobs:
- name: Maven build
run: mvn -B clean install -DskipTests -P ${{ inputs.hadoop }} -Dcheckstyle.skip ${{ inputs.mvn_opts }}
- name: Run Junit tests
- run: mvn -B verify surefire-report:report --fail-never -f ${{ (inputs.module == '' || inputs.module == 'all') && '.' || inputs.module }} -P ${{ inputs.hadoop }},${{ inputs.test_profile }} -Dcheckstyle.skip ${{ inputs.mvn_opts }}
- - name: Publish Test Report
+ run: mvn -B verify surefire-report:report --fail-never -Dsurefire.testFailureIgnore=true -f ${{ (inputs.module == '' || inputs.module == 'all') && '.' || inputs.module }} -P ${{ inputs.hadoop }},${{ inputs.test_profile }} -Dcheckstyle.skip ${{ inputs.mvn_opts }}
+ - name: Publish Test Report on GitHub
uses: scacap/action-surefire-report@v1
env:
NODE_OPTIONS: '--max_old_space_size=4096'
diff --git a/opencga-analysis/pom.xml b/opencga-analysis/pom.xml
index 3b96f1b246e..1d127746157 100644
--- a/opencga-analysis/pom.xml
+++ b/opencga-analysis/pom.xml
@@ -22,7 +22,7 @@
org.opencb.opencga
opencga
- 3.2.0-SNAPSHOT
+ 3.2.1-SNAPSHOT
../pom.xml
@@ -357,6 +357,17 @@
+
+
+ ../opencga-core/src/test/resources
+
+ log4j2-test.xml
+
+
+
+ src/test/resources
+
+
org.apache.maven.plugins
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentCoverageAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentCoverageAnalysis.java
index 2712d22b8f3..ce7b82a7dba 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentCoverageAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentCoverageAnalysis.java
@@ -54,6 +54,10 @@ protected void check() throws Exception {
super.check();
// Sanity check
+ if (StringUtils.isEmpty(getJobId())) {
+ throw new ToolException("Missing job ID");
+ }
+
if (StringUtils.isEmpty(getStudy())) {
throw new ToolException("Missing study when computing alignment coverage");
}
@@ -168,20 +172,22 @@ protected void run() throws Exception {
+ ") was not create, please, check log files.");
}
- // Try to copy the BW file into the BAM file directory
+ // Try to move the BW file into the BAM file directory
+ boolean moveSuccessful = false;
Path targetPath = Paths.get(bamCatalogFile.getUri()).getParent().resolve(bwPath.getFileName());
try {
- Files.move(bwPath, targetPath);
+ Path movedPath = Files.move(bwPath, targetPath);
+ moveSuccessful = targetPath.equals(movedPath);
} catch (Exception e) {
- // Do nothing
- logger.info("Moving from {} to {}: {}", bwPath, targetPath, e.getMessage());
+ // Log message
+ logger.info("Error moving the coverage file into the BAM folder {} to {}", bwPath, targetPath, e);
}
- if (targetPath.toFile().exists()) {
+ if (moveSuccessful) {
bwPath = targetPath;
- logger.info("Coverage file was copied into the BAM folder: {}", bwPath);
+ logger.info("Coverage file was moved into the BAM folder: {}", bwPath);
} else {
- logger.info("Couldn't copy the coverage file into the BAM folder. The coverage file is in the job folder instead: {}",
+ logger.info("Couldn't move the coverage file into the BAM folder. The coverage file is in the job folder instead: {}",
bwPath);
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentIndexOperation.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentIndexOperation.java
index f21986c2174..fa537f5a973 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentIndexOperation.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentIndexOperation.java
@@ -16,29 +16,34 @@
package org.opencb.opencga.analysis.alignment;
+import org.apache.commons.lang3.StringUtils;
import org.opencb.biodata.tools.alignment.BamManager;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.opencga.analysis.tools.OpenCgaTool;
+import org.opencb.opencga.analysis.tools.OpenCgaToolScopeStudy;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.core.exceptions.ToolException;
+import org.opencb.opencga.core.models.alignment.AlignmentIndexParams;
+import org.opencb.opencga.core.models.alignment.CoverageIndexParams;
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.models.common.InternalStatus;
import org.opencb.opencga.core.models.file.*;
import org.opencb.opencga.core.response.OpenCGAResult;
import org.opencb.opencga.core.tools.annotations.Tool;
+import org.opencb.opencga.core.tools.annotations.ToolParams;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Tool(id = AlignmentIndexOperation.ID, resource = Enums.Resource.ALIGNMENT, description = "Index alignment.")
-public class AlignmentIndexOperation extends OpenCgaTool {
+public class AlignmentIndexOperation extends OpenCgaToolScopeStudy {
public static final String ID = "alignment-index-run";
public static final String DESCRIPTION = "Index a given alignment file, e.g., create a .bai file from a .bam file";
- private String study;
- private String inputFile;
+ @ToolParams
+ protected final AlignmentIndexParams indexParams = new AlignmentIndexParams();
private File inputCatalogFile;
private Path inputPath;
@@ -48,14 +53,23 @@ public class AlignmentIndexOperation extends OpenCgaTool {
protected void check() throws Exception {
super.check();
+ // Sanity check
+ if (StringUtils.isEmpty(getJobId())) {
+ throw new ToolException("Missing job ID");
+ }
+
+ if (StringUtils.isEmpty(getStudy())) {
+ throw new ToolException("Missing study when computing alignment index");
+ }
+
OpenCGAResult fileResult;
try {
- fileResult = catalogManager.getFileManager().get(getStudy(), inputFile, QueryOptions.empty(), token);
+ fileResult = catalogManager.getFileManager().get(getStudy(), indexParams.getFileId(), QueryOptions.empty(), token);
} catch (CatalogException e) {
- throw new ToolException("Error accessing file '" + inputFile + "' of the study " + study + "'", e);
+ throw new ToolException("Error accessing file '" + indexParams.getFileId() + "' of the study " + study + "'", e);
}
if (fileResult.getNumResults() <= 0) {
- throw new ToolException("File '" + inputFile + "' not found in study '" + study + "'");
+ throw new ToolException("File '" + indexParams.getFileId() + "' not found in study '" + study + "'");
}
inputCatalogFile = fileResult.getResults().get(0);
@@ -64,7 +78,7 @@ protected void check() throws Exception {
// Check if the input file is .bam or .cram
if (!filename.endsWith(AlignmentConstants.BAM_EXTENSION) && !filename.endsWith(AlignmentConstants.CRAM_EXTENSION)) {
- throw new ToolException("Invalid input alignment file '" + inputFile + "': it must be in BAM or CRAM format");
+ throw new ToolException("Invalid input alignment file '" + indexParams.getFileId() + "': it must be in BAM or CRAM format");
}
outputPath = getOutDir().resolve(filename + (filename.endsWith(AlignmentConstants.BAM_EXTENSION)
@@ -73,6 +87,9 @@ protected void check() throws Exception {
@Override
protected void run() throws Exception {
+ setUpStorageEngineExecutor(study);
+
+ logger.info("Running with parameters {}", indexParams);
step(ID, () -> {
// Compute index if necessary
@@ -82,28 +99,31 @@ protected void run() throws Exception {
bamManager.close();
if (!outputPath.toFile().exists()) {
- throw new ToolException("Something wrong happened when computing index file for '" + inputFile + "'");
+ throw new ToolException("Something wrong happened when computing index file for '" + indexParams.getFileId() + "'");
}
- // Try to copy the BAI file into the BAM file directory
+ // Try to move the BAI file into the BAM file directory
+ boolean moveSuccessful = false;
Path targetPath = inputPath.getParent().resolve(outputPath.getFileName());
try {
- Files.move(outputPath, targetPath);
+ Path movedPath = Files.move(outputPath, targetPath);
+ moveSuccessful = targetPath.equals(movedPath);
} catch (Exception e) {
- // Do nothing
- logger.info("Moving from {} to {}: {}", outputPath, targetPath, e.getMessage());
+ // Log message
+ logger.info("Error moving from {} to {}", outputPath, targetPath, e);
}
- if (targetPath.toFile().exists()) {
+ if (moveSuccessful) {
outputPath = targetPath;
- logger.info("Alignment index file was copied into the BAM folder: {}", outputPath);
+ logger.info("Alignment index file was moved into the BAM folder: {}", outputPath);
} else {
- logger.info("Couldn't copy the alignment index file into the BAM folder. The index file is in the job folder instead: {}",
+ logger.info("Couldn't move the alignment index file into the BAM folder. The index file is in the job folder instead: {}",
outputPath);
}
// Link generated BAI file and update samples info, related file
- File baiCatalogFile = AlignmentAnalysisUtils.linkAndUpdate(inputCatalogFile, outputPath, getJobId(), study, catalogManager, token);
+ File baiCatalogFile = AlignmentAnalysisUtils.linkAndUpdate(inputCatalogFile, outputPath, getJobId(), study, catalogManager,
+ token);
// Update BAM file internal in order to set the alignment index (BAI)
FileInternalAlignmentIndex fileAlignmentIndex = new FileInternalAlignmentIndex(new InternalStatus(InternalStatus.READY),
@@ -111,22 +131,4 @@ protected void run() throws Exception {
catalogManager.getFileManager().updateFileInternalAlignmentIndex(study, inputCatalogFile, fileAlignmentIndex, token);
});
}
-
- public String getStudy() {
- return study;
- }
-
- public AlignmentIndexOperation setStudy(String study) {
- this.study = study;
- return this;
- }
-
- public String getInputFile() {
- return inputFile;
- }
-
- public AlignmentIndexOperation setInputFile(String inputFile) {
- this.inputFile = inputFile;
- return this;
- }
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java
index 7c3396cb48e..9dbf2d9223a 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java
@@ -27,7 +27,6 @@
import org.opencb.biodata.tools.alignment.BamUtils;
import org.opencb.cellbase.client.rest.CellBaseClient;
import org.opencb.cellbase.client.rest.GeneClient;
-import org.opencb.commons.datastore.core.ObjectMap;
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.opencga.analysis.StorageManager;
@@ -39,7 +38,6 @@
import org.opencb.opencga.catalog.managers.CatalogManager;
import org.opencb.opencga.catalog.utils.CatalogFqn;
import org.opencb.opencga.catalog.utils.ParamUtils;
-import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.JwtPayload;
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.project.Project;
@@ -66,6 +64,7 @@ public class AlignmentStorageManager extends StorageManager {
private AlignmentStorageEngine alignmentStorageEngine;
private String jobId;
+ private boolean dryRun;
private static final Map statsMap = new HashMap<>();
@@ -78,31 +77,29 @@ public AlignmentStorageManager(CatalogManager catalogManager, StorageEngineFacto
initStatsMap();
}
- public AlignmentStorageManager(CatalogManager catalogManager, StorageEngineFactory storageEngineFactory, String jobId) {
+ public AlignmentStorageManager(CatalogManager catalogManager, StorageEngineFactory storageEngineFactory, String jobId, boolean dryRun) {
super(catalogManager, storageEngineFactory);
// TODO: Create this alignmentStorageEngine by reflection
this.alignmentStorageEngine = new LocalAlignmentStorageEngine();
this.jobId = jobId;
+ this.dryRun = dryRun;
initStatsMap();
}
- //-------------------------------------------------------------------------
- // INDEX
- //-------------------------------------------------------------------------
-
- public void index(String study, String inputFile, String outdir, String token) throws ToolException {
- ObjectMap params = new ObjectMap();
-
- AlignmentIndexOperation indexOperation = new AlignmentIndexOperation();
- indexOperation.setUp(null, catalogManager, storageEngineFactory, params, Paths.get(outdir), jobId, token);
-
- indexOperation.setStudy(study);
- indexOperation.setInputFile(inputFile);
-
- indexOperation.start();
- }
+// //-------------------------------------------------------------------------
+// // INDEX
+// //-------------------------------------------------------------------------
+//
+// public void index(String study, String inputFile, String outdir, String token) throws ToolException {
+// ToolRunner toolRunner = new ToolRunner("", catalogManager, storageEngineFactory);
+//
+// AlignmentIndexParams params = new AlignmentIndexParams();
+// params.setFileId(inputFile);
+// toolRunner.execute(AlignmentIndexOperation.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, study), Paths.get(outdir),
+// jobId, token);
+// }
//-------------------------------------------------------------------------
// QUERY
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/qc/AlignmentQcAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/qc/AlignmentQcAnalysis.java
index 6b541da0037..67ac836c36a 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/qc/AlignmentQcAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/qc/AlignmentQcAnalysis.java
@@ -120,7 +120,8 @@ protected void run() throws ToolException {
OpenCGAResult flagStatsJobResult = catalogManager.getJobManager()
.submit(study, AlignmentFlagStatsAnalysis.ID, Enums.Priority.MEDIUM, params, null, "Job generated by "
- + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), token);
+ + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), getJobId(), null,
+ false, token);
flagStatsJobId = flagStatsJobResult.first().getId();
addEvent(Event.Type.INFO, "Submit job " + flagStatsJobId + " to compute stats (" + AlignmentFlagStatsAnalysis.ID
+ ")");
@@ -137,7 +138,8 @@ protected void run() throws ToolException {
OpenCGAResult statsJobResult = catalogManager.getJobManager()
.submit(study, AlignmentStatsAnalysis.ID, Enums.Priority.MEDIUM, params, null, "Job generated by "
- + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), token);
+ + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), getJobId(), null,
+ false, token);
statsJobId = statsJobResult.first().getId();
addEvent(Event.Type.INFO, "Submit job " + statsJobId + " to compute stats (" + AlignmentStatsAnalysis.ID + ")");
}
@@ -154,7 +156,7 @@ protected void run() throws ToolException {
OpenCGAResult fastQcMetricsJobResult = catalogManager.getJobManager()
.submit(study, AlignmentFastQcMetricsAnalysis.ID, Enums.Priority.MEDIUM, params, null,
"Job generated by " + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(),
- token);
+ getJobId(), null, false, token);
fastQcMetricsJobId = fastQcMetricsJobResult.first().getId();
addEvent(Event.Type.INFO, "Submit job " + fastQcMetricsJobId + " to compute FastQC metrics ("
+ AlignmentFastQcMetricsAnalysis.ID + ")");
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationManager.java
index d7756ea82a5..d9c2e7c5734 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationManager.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationManager.java
@@ -64,7 +64,7 @@
import org.opencb.opencga.core.models.study.Study;
import org.opencb.opencga.core.models.user.User;
import org.opencb.opencga.core.response.OpenCGAResult;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.storage.core.StorageEngineFactory;
import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
import org.opencb.opencga.storage.core.metadata.models.SampleMetadata;
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalTsvAnnotationLoader.java
index 1d2be95e82e..abdbca2e7b5 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/ClinicalTsvAnnotationLoader.java
@@ -32,7 +32,7 @@
import java.util.Collections;
@Tool(id = ClinicalTsvAnnotationLoader.ID, resource = Enums.Resource.CLINICAL_ANALYSIS, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class ClinicalTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "clinical-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysis.java
index 39de4806eb0..06e1c7f4838 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysis.java
@@ -44,7 +44,7 @@
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.models.individual.Individual;
import org.opencb.opencga.core.response.OpenCGAResult;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam;
@@ -68,6 +68,7 @@ public class ExomiserInterpretationAnalysis extends InterpretationAnalysis {
private String studyId;
private String clinicalAnalysisId;
private String sampleId;
+ private ClinicalAnalysis.Type clinicalAnalysisType;
private ClinicalAnalysis clinicalAnalysis;
@@ -116,6 +117,14 @@ protected void check() throws Exception {
}
sampleId = clinicalAnalysis.getProband().getSamples().get(0).getId();
+ if (clinicalAnalysis.getType() == ClinicalAnalysis.Type.FAMILY) {
+ clinicalAnalysisType = ClinicalAnalysis.Type.FAMILY;
+ } else {
+ clinicalAnalysisType = ClinicalAnalysis.Type.SINGLE;
+ }
+ logger.info("The clinical analysis type is {}, so the Exomiser will be run in mode {}", clinicalAnalysis.getType(),
+ clinicalAnalysisType);
+
// Update executor params with OpenCGA home and session ID
setUpStorageEngineExecutor(studyId);
}
@@ -128,6 +137,7 @@ protected void run() throws ToolException {
getToolExecutor(ExomiserWrapperAnalysisExecutor.class)
.setStudyId(studyId)
.setSampleId(sampleId)
+ .setClinicalAnalysisType(clinicalAnalysisType)
.execute();
saveInterpretation(studyId, clinicalAnalysis);
@@ -181,7 +191,8 @@ private List getPrimaryFindings() throws IOException, StorageEn
// Prepare variant query
List sampleIds = new ArrayList<>();
- if (clinicalAnalysis.getFamily() != null && CollectionUtils.isNotEmpty(clinicalAnalysis.getFamily().getMembers())) {
+ if (clinicalAnalysis.getType() == ClinicalAnalysis.Type.FAMILY && clinicalAnalysis.getFamily() != null
+ && CollectionUtils.isNotEmpty(clinicalAnalysis.getFamily().getMembers())) {
for (Individual member : clinicalAnalysis.getFamily().getMembers()) {
Individual individual = IndividualQcUtils.getIndividualById(studyId, member.getId(), getCatalogManager(), getToken());
if (CollectionUtils.isNotEmpty(individual.getSamples())) {
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/AuxiliarRgaAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/AuxiliarRgaAnalysis.java
index 37823aac657..d70f3f3d244 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/AuxiliarRgaAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/AuxiliarRgaAnalysis.java
@@ -7,7 +7,7 @@
import org.opencb.opencga.core.tools.annotations.Tool;
@Tool(id = AuxiliarRgaAnalysis.ID, resource = Enums.Resource.RGA, type = Tool.Type.OPERATION,
- description = AuxiliarRgaAnalysis.DESCRIPTION)
+ description = AuxiliarRgaAnalysis.DESCRIPTION, priority = Enums.Priority.HIGH)
public class AuxiliarRgaAnalysis extends OperationTool {
public final static String ID = "rga-aux-index";
public final static String DESCRIPTION = ParamConstants.INDEX_AUXILIAR_COLLECTION_DESCRIPTION;
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/RgaAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/RgaAnalysis.java
index 0e2a56e644d..132b3d72464 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/RgaAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/rga/RgaAnalysis.java
@@ -6,7 +6,8 @@
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.tools.annotations.Tool;
-@Tool(id = RgaAnalysis.ID, resource = Enums.Resource.RGA, type = Tool.Type.OPERATION, description = "Index RGA study.")
+@Tool(id = RgaAnalysis.ID, resource = Enums.Resource.RGA, type = Tool.Type.OPERATION, description = "Index RGA study.",
+ priority = Enums.Priority.HIGH)
public class RgaAnalysis extends OperationTool {
public final static String ID = "rga-index";
public final static String DESCRIPTION = "Generate Recessive Gene Analysis secondary index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/tiering/CancerTieringInterpretationAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/tiering/CancerTieringInterpretationAnalysisExecutor.java
index ce89757143a..ea8dc7c3c89 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/tiering/CancerTieringInterpretationAnalysisExecutor.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/tiering/CancerTieringInterpretationAnalysisExecutor.java
@@ -41,7 +41,7 @@
import org.opencb.opencga.core.models.individual.Individual;
import org.opencb.opencga.core.models.sample.Sample;
import org.opencb.opencga.core.response.OpenCGAResult;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.core.tools.OpenCgaToolExecutor;
import org.opencb.opencga.core.tools.annotations.ToolExecutor;
import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/zetta/ZettaInterpretationAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/zetta/ZettaInterpretationAnalysisExecutor.java
index c45f0b484a9..cbf7e8211d2 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/zetta/ZettaInterpretationAnalysisExecutor.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/clinical/zetta/ZettaInterpretationAnalysisExecutor.java
@@ -28,7 +28,7 @@
import org.opencb.opencga.analysis.clinical.ClinicalUtils;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.core.exceptions.ToolException;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.core.tools.OpenCgaToolExecutor;
import org.opencb.opencga.core.tools.annotations.ToolExecutor;
import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
@@ -40,7 +40,6 @@
import java.util.Map;
import static org.opencb.opencga.analysis.clinical.InterpretationAnalysis.PRIMARY_FINDINGS_FILENAME;
-import static org.opencb.opencga.analysis.clinical.InterpretationAnalysis.SECONDARY_FINDINGS_FILENAME;
import static org.opencb.opencga.analysis.variant.manager.VariantCatalogQueryUtils.FAMILY_SEGREGATION;
@ToolExecutor(id = "opencga-local",
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/cohort/CohortTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/cohort/CohortTsvAnnotationLoader.java
index 82b8c9e1bb4..7dcdc62c8fc 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/cohort/CohortTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/cohort/CohortTsvAnnotationLoader.java
@@ -25,7 +25,7 @@
import org.opencb.opencga.core.tools.annotations.Tool;
@Tool(id = CohortTsvAnnotationLoader.ID, resource = Enums.Resource.COHORT, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class CohortTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "cohort-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/family/FamilyTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/family/FamilyTsvAnnotationLoader.java
index 6d4091fdce3..68efcc010b5 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/family/FamilyTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/family/FamilyTsvAnnotationLoader.java
@@ -25,7 +25,7 @@
import org.opencb.opencga.core.tools.annotations.Tool;
@Tool(id = FamilyTsvAnnotationLoader.ID, resource = Enums.Resource.FAMILY, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class FamilyTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "family-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FetchAndRegisterTask.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FetchAndRegisterTask.java
index c242582b528..3dcd8079060 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FetchAndRegisterTask.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FetchAndRegisterTask.java
@@ -46,7 +46,7 @@
import java.util.List;
@Tool(id = FetchAndRegisterTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION,
- description = "Download an external file and register it in OpenCGA.")
+ description = "Download an external file and register it in OpenCGA.", priority = Enums.Priority.HIGH)
public class FetchAndRegisterTask extends OpenCgaToolScopeStudy {
public final static String ID = "files-fetch";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileDeleteTask.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileDeleteTask.java
index 89edaa6e683..2750435e049 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileDeleteTask.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileDeleteTask.java
@@ -42,7 +42,8 @@
import java.io.IOException;
import java.util.*;
-@Tool(id = FileDeleteTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = "Delete files.")
+@Tool(id = FileDeleteTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = "Delete files.",
+ priority = Enums.Priority.HIGH)
public class FileDeleteTask extends OpenCgaTool {
public final static String ID = "files-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileLinkTask.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileLinkTask.java
index d6506bb6d81..88cb038215a 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileLinkTask.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileLinkTask.java
@@ -18,7 +18,8 @@
import java.util.List;
import java.util.Map;
-@Tool(id = FileLinkTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = FileLinkTask.DESCRIPTION)
+@Tool(id = FileLinkTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = FileLinkTask.DESCRIPTION,
+ priority = Enums.Priority.HIGH)
public class FileLinkTask extends OpenCgaToolScopeStudy {
public static final String ID = "file-link";
@@ -69,7 +70,7 @@ protected void run() throws Exception {
Job postLinkJob = catalogManager.getJobManager()
.submit(getStudy(), PostLinkSampleAssociation.ID, Enums.Priority.MEDIUM, params, null,
"Job generated by " + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(),
- getToken()).first();
+ getJobId(), null, false, getToken()).first();
logger.info("Submit post-link job : " + postLinkJob.getId());
}
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileTsvAnnotationLoader.java
index ddd77ca22af..f52871a7b6e 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileTsvAnnotationLoader.java
@@ -32,7 +32,7 @@
import java.util.Collections;
@Tool(id = FileTsvAnnotationLoader.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class FileTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "file-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileUnlinkTask.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileUnlinkTask.java
index e333d7b3813..24a45fe40b9 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileUnlinkTask.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/FileUnlinkTask.java
@@ -38,7 +38,8 @@
import java.util.*;
-@Tool(id = FileUnlinkTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = "Unlink files.")
+@Tool(id = FileUnlinkTask.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION, description = "Unlink files.",
+ priority = Enums.Priority.HIGH)
public class FileUnlinkTask extends OpenCgaTool {
public final static String ID = "files-unlink";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/PostLinkSampleAssociation.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/PostLinkSampleAssociation.java
index 60d67f05996..d624d2e4828 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/PostLinkSampleAssociation.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/file/PostLinkSampleAssociation.java
@@ -24,7 +24,7 @@
import java.util.*;
@Tool(id = PostLinkSampleAssociation.ID, resource = Enums.Resource.FILE, type = Tool.Type.OPERATION,
- description = PostLinkSampleAssociation.DESCRIPTION)
+ description = PostLinkSampleAssociation.DESCRIPTION, priority = Enums.Priority.HIGH)
public class PostLinkSampleAssociation extends OpenCgaToolScopeStudy {
public static final String ID = "postlink";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/individual/IndividualTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/individual/IndividualTsvAnnotationLoader.java
index 3c53ac46524..b6776329c50 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/individual/IndividualTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/individual/IndividualTsvAnnotationLoader.java
@@ -25,7 +25,7 @@
import org.opencb.opencga.core.tools.annotations.Tool;
@Tool(id = IndividualTsvAnnotationLoader.ID, resource = Enums.Resource.INDIVIDUAL, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class IndividualTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "individual-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/SampleTsvAnnotationLoader.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/SampleTsvAnnotationLoader.java
index adeb819720b..c3fa3ad84b1 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/SampleTsvAnnotationLoader.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/SampleTsvAnnotationLoader.java
@@ -25,7 +25,7 @@
import org.opencb.opencga.core.tools.annotations.Tool;
@Tool(id = SampleTsvAnnotationLoader.ID, resource = Enums.Resource.SAMPLE, type = Tool.Type.OPERATION,
- description = "Load annotations from TSV file.")
+ description = "Load annotations from TSV file.", priority = Enums.Priority.HIGH)
public class SampleTsvAnnotationLoader extends TsvAnnotationLoader {
public final static String ID = "sample-tsv-load";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/qc/SampleQcAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/qc/SampleQcAnalysis.java
index 54f22745057..b8d460824c1 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/qc/SampleQcAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/sample/qc/SampleQcAnalysis.java
@@ -225,7 +225,8 @@ protected void run() throws ToolException {
OpenCGAResult variantStatsJobResult = catalogManager.getJobManager()
.submit(study, SampleVariantStatsAnalysis.ID, Enums.Priority.MEDIUM, params, null, "Job generated by "
- + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), token);
+ + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), getJobId(), null,
+ false, token);
variantStatsJobId = variantStatsJobResult.first().getId();
addEvent(Event.Type.INFO, "Submit job " + variantStatsJobId + " to compute stats (" + SampleVariantStatsAnalysis.ID
+ ")");
@@ -267,7 +268,8 @@ protected void run() throws ToolException {
OpenCGAResult signatureJobResult = catalogManager.getJobManager()
.submit(getStudy(), MutationalSignatureAnalysis.ID, Enums.Priority.MEDIUM, params, null, "Job generated by "
- + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), token);
+ + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(), getJobId(), null,
+ false, token);
signatureJobId = signatureJobResult.first().getId();
logger.info("Submitted job {} to compute the mutational signature analysis {}", signatureJobId,
MutationalSignatureAnalysis.ID);
@@ -289,7 +291,7 @@ protected void run() throws ToolException {
OpenCGAResult genomePlotJobResult = catalogManager.getJobManager()
.submit(getStudy(), GenomePlotAnalysis.ID, Enums.Priority.MEDIUM, params, null,
"Job generated by " + getId() + " - " + getJobId(), Collections.emptyList(), Collections.emptyList(),
- token);
+ getJobId(), null, false, token);
genomePlotJobId = genomePlotJobResult.first().getId();
addEvent(Event.Type.INFO, "Submit job " + genomePlotJobId + " to compute genome plot (" + GenomePlotAnalysis.ID
+ ")");
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/templates/TemplateRunner.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/templates/TemplateRunner.java
index 08797e1185e..cf8390d1a61 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/templates/TemplateRunner.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/templates/TemplateRunner.java
@@ -15,7 +15,7 @@
import java.nio.file.Paths;
@Tool(id = TemplateRunner.ID, description = TemplateRunner.DESCRIPTION, type = Tool.Type.OPERATION, resource = Enums.Resource.STUDY,
- scope = Tool.Scope.STUDY)
+ scope = Tool.Scope.STUDY, priority = Enums.Priority.HIGH)
public class TemplateRunner extends OperationTool {
public static final String ID = "templates";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/OpenCgaTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/OpenCgaTool.java
index 7769315137b..5a88635e45c 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/OpenCgaTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/OpenCgaTool.java
@@ -67,6 +67,7 @@ public abstract class OpenCgaTool {
private String jobId;
private String opencgaHome;
+ private boolean dryRun;
protected String token;
protected final ObjectMap params;
@@ -92,19 +93,20 @@ public OpenCgaTool() {
}
public final OpenCgaTool setUp(String opencgaHome, CatalogManager catalogManager, StorageEngineFactory engineFactory,
- ObjectMap params, Path outDir, String jobId, String token) {
+ ObjectMap params, Path outDir, String jobId, boolean dryRun, String token) {
VariantStorageManager manager = new VariantStorageManager(catalogManager, engineFactory);
- return setUp(opencgaHome, catalogManager, manager, params, outDir, jobId, token);
+ return setUp(opencgaHome, catalogManager, manager, params, outDir, jobId, dryRun, token);
}
public final OpenCgaTool setUp(String opencgaHome, CatalogManager catalogManager, VariantStorageManager variantStorageManager,
- ObjectMap params, Path outDir, String jobId, String token) {
+ ObjectMap params, Path outDir, String jobId, boolean dryRun, String token) {
this.opencgaHome = opencgaHome;
this.catalogManager = catalogManager;
this.configuration = catalogManager.getConfiguration();
this.variantStorageManager = variantStorageManager;
this.storageConfiguration = variantStorageManager.getStorageConfiguration();
this.jobId = jobId;
+ this.dryRun = dryRun;
this.token = token;
if (params != null) {
this.params.putAll(params);
@@ -188,13 +190,14 @@ public final ExecutionResult start() throws ToolException {
exception = e;
}
if (!erm.isClosed()) {
- privateLogger.error("Unexpected system shutdown!");
+ String message = "Unexpected system shutdown. Job killed by the system.";
+ privateLogger.error(message);
try {
if (scratchDir != null) {
deleteScratchDirectory();
}
if (exception == null) {
- exception = new RuntimeException("Unexpected system shutdown");
+ exception = new RuntimeException(message);
}
logException(exception);
ExecutionResult result = erm.close(exception);
@@ -243,21 +246,32 @@ public final ExecutionResult start() throws ToolException {
try {
currentStep = "check";
privateCheck();
- check();
- currentStep = null;
- erm.setSteps(getSteps());
- run();
+ if (dryRun) {
+ logger.info("Dry run enabled. Sleep for 5 seconds and skip execution.");
+ Thread.sleep(5000);
+ } else {
+ currentStep = null;
+ erm.setSteps(getSteps());
+ run();
+ }
} catch (ToolException e) {
throw e;
} catch (Exception e) {
throw new ToolException(e);
}
+ Runtime.getRuntime().removeShutdownHook(hook);
} catch (Throwable e) {
exception = e;
+ // Do not use a finally block to remove shutdownHook, as finally blocks will be executed even if the JVM is killed,
+ // and this would throw IllegalStateException("Shutdown in progress");
+ try {
+ Runtime.getRuntime().removeShutdownHook(hook);
+ } catch (Exception e1) {
+ e.addSuppressed(e1);
+ }
throw e;
} finally {
deleteScratchDirectory();
- Runtime.getRuntime().removeShutdownHook(hook);
stopMemoryMonitor();
result = erm.close(exception);
logException(exception);
@@ -308,6 +322,7 @@ private void privateCheck() throws Exception {
if (toolParams != null) {
toolParams.updateParams(getParams());
}
+ check();
}
/**
@@ -460,7 +475,7 @@ protected final void step(String stepId, StepRunnable step) throws ToolException
} catch (ToolException e) {
throw e;
} catch (Exception e) {
- throw new ToolException("Exception from step " + stepId, e);
+ throw new ToolException("Exception from step '" + stepId + "'", e);
}
} else {
privateLogger.info("------- Skip step " + stepId + " -------");
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/ToolRunner.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/ToolRunner.java
index 830110c7c23..4a1dd9cf02d 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/ToolRunner.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/tools/ToolRunner.java
@@ -34,7 +34,6 @@
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Collections;
public class ToolRunner {
@@ -106,19 +105,22 @@ public ExecutionResult execute(Job job, String token) throws CatalogException, T
* @throws ToolException if the execution fails
*/
public ExecutionResult execute(Job job, Path outDir, String token) throws CatalogException, ToolException {
- return execute(job.getTool().getId(), new ObjectMap(job.getParams()), outDir, job.getId(), token);
+ return execute(job.getTool().getId(), new ObjectMap(job.getParams()), outDir, job.getId(), job.isDryRun(), token);
}
/**
* Execute a tool
+ *
* @param toolId Tool identifier. It can be either the tool id itself, or the class name.
* @param params Params for the execution.
* @param outDir Output directory. Mandatory
- * @param token session id of the user that will execute the tool.
+ * @param dryRun Dry-run mode.
+ * @param token session id of the user that will execute the tool.
* @return Execution result
* @throws ToolException if the execution fails
*/
- public ExecutionResult execute(String toolId, ObjectMap params, Path outDir, String jobId, String token) throws ToolException {
+ public ExecutionResult execute(String toolId, ObjectMap params, Path outDir, String jobId, boolean dryRun, String token)
+ throws ToolException {
OpenCgaTool tool;
if (configuration != null && configuration.getAnalysis() != null
&& CollectionUtils.isNotEmpty(configuration.getAnalysis().getPackages())) {
@@ -126,58 +128,67 @@ public ExecutionResult execute(String toolId, ObjectMap params, Path outDir, Str
} else {
tool = toolFactory.createTool(toolId);
}
- return tool.setUp(opencgaHome, catalogManager, variantStorageManager, params, outDir, jobId, token)
+ return tool.setUp(opencgaHome, catalogManager, variantStorageManager, params, outDir, jobId, dryRun, token)
.start();
}
/**
* Execute a tool
- * @param tool Tool class
- * @param study Study id
+ *
+ * @param tool Tool class
+ * @param study Study id
* @param toolParams Specific ToolParams for the execution.
- * @param outDir Output directory. Mandatory
- * @param jobId Job Id (if any)
- * @param token session id of the user that will execute the tool.
+ * @param outDir Output directory. Mandatory
+ * @param jobId Job Id (if any)
+ * @param dryRun Dry-run mode.
+ * @param token session id of the user that will execute the tool.
* @return Execution result
* @throws ToolException if the execution fails
*/
- public ExecutionResult execute(Class extends OpenCgaTool> tool, String study, ToolParams toolParams, Path outDir, String jobId, String token)
+ public ExecutionResult execute(Class extends OpenCgaTool> tool, String study, ToolParams toolParams, Path outDir, String jobId,
+ boolean dryRun, String token)
throws ToolException {
ObjectMap params = new ObjectMap();
params.putIfNotEmpty(ParamConstants.STUDY_PARAM, study);
- return execute(tool, toolParams, params, outDir, jobId, token);
+ return execute(tool, toolParams, params, outDir, jobId, dryRun, token);
}
/**
* Execute a tool
- * @param tool Tool class
+ *
+ * @param tool Tool class
* @param toolParams Specific ToolParams for the execution.
- * @param params Params for the execution.
- * @param outDir Output directory. Mandatory
- * @param jobId Job Id (if any)
- * @param token session id of the user that will execute the tool.
+ * @param params Params for the execution.
+ * @param outDir Output directory. Mandatory
+ * @param jobId Job Id (if any)
+ * @param dryRun Dry-run mode.
+ * @param token session id of the user that will execute the tool.
* @return Execution result
* @throws ToolException if the execution fails
*/
- public ExecutionResult execute(Class extends OpenCgaTool> tool, ToolParams toolParams, ObjectMap params, Path outDir, String jobId, String token)
+ public ExecutionResult execute(Class extends OpenCgaTool> tool, ToolParams toolParams, ObjectMap params, Path outDir, String jobId,
+ boolean dryRun, String token)
throws ToolException {
if (toolParams != null) {
params = toolParams.toObjectMap(params);
}
- return execute(tool, params, outDir, jobId, token);
+ return execute(tool, params, outDir, jobId, dryRun, token);
}
/**
* Execute a tool
- * @param tool Tool class
+ *
+ * @param tool Tool class
* @param toolParams Specific ToolParams for the execution.
- * @param outDir Output directory. Mandatory
- * @param jobId Job Id (if any)
- * @param token session id of the user that will execute the tool.
+ * @param outDir Output directory. Mandatory
+ * @param jobId Job Id (if any)
+ * @param dryRun Dry-run mode.
+ * @param token session id of the user that will execute the tool.
* @return Execution result
* @throws ToolException if the execution fails
*/
- public ExecutionResult execute(Class extends OpenCgaTool> tool, ToolParams toolParams, Path outDir, String jobId, String token)
+ public ExecutionResult execute(Class extends OpenCgaTool> tool, ToolParams toolParams, Path outDir, String jobId, boolean dryRun,
+ String token)
throws ToolException {
ObjectMap params;
if (toolParams != null) {
@@ -185,24 +196,27 @@ public ExecutionResult execute(Class extends OpenCgaTool> tool, ToolParams too
} else {
params = new ObjectMap();
}
- return execute(tool, params, outDir, jobId, token);
+ return execute(tool, params, outDir, jobId, dryRun, token);
}
/**
* Execute a tool
- * @param tool Tool class
+ *
+ * @param tool Tool class
* @param params Params for the execution.
* @param outDir Output directory. Mandatory
- * @param jobId Job Id (if any)
- * @param token session id of the user that will execute the tool.
+ * @param jobId Job Id (if any)
+ * @param dryRun
+ * @param token session id of the user that will execute the tool.
* @return Execution result
* @throws ToolException if the execution fails
*/
- public ExecutionResult execute(Class extends OpenCgaTool> tool, ObjectMap params, Path outDir, String jobId, String token) throws ToolException {
+ public ExecutionResult execute(Class extends OpenCgaTool> tool, ObjectMap params, Path outDir, String jobId, boolean dryRun,
+ String token) throws ToolException {
return toolFactory
.createTool(tool)
- .setUp(opencgaHome, catalogManager, variantStorageManager, params, outDir, jobId, token)
+ .setUp(opencgaHome, catalogManager, variantStorageManager, params, outDir, jobId, dryRun, token)
.start();
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/julie/JulieTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/julie/JulieTool.java
index 2c00104e732..49ccd95298a 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/julie/JulieTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/julie/JulieTool.java
@@ -25,7 +25,8 @@
resource = Enums.Resource.VARIANT,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- description = JulieTool.DESCRIPTION)
+ description = JulieTool.DESCRIPTION,
+ priority = Enums.Priority.HIGH)
public class JulieTool extends OpenCgaTool {
public static final String ID = "julie";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java
index 847a2bb1ac6..6fb44855fb7 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java
@@ -71,9 +71,8 @@
import org.opencb.opencga.core.models.sample.SamplePermissions;
import org.opencb.opencga.core.models.study.Study;
import org.opencb.opencga.core.models.study.StudyPermissions;
-import org.opencb.opencga.core.models.variant.VariantPruneParams;
import org.opencb.opencga.core.response.OpenCGAResult;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.core.tools.ToolParams;
import org.opencb.opencga.storage.core.StorageEngineFactory;
import org.opencb.opencga.storage.core.StoragePipelineResult;
@@ -406,7 +405,6 @@ public DataResult familyIndex(String study, List familiesStr, bool
throws CatalogException, StorageEngineException {
return secureOperation(VariantFamilyIndexOperationTool.ID, study, params, token, engine -> {
List trios = new LinkedList<>();
- List events = new LinkedList<>();
VariantStorageMetadataManager metadataManager = engine.getMetadataManager();
VariantCatalogQueryUtils catalogUtils = new VariantCatalogQueryUtils(catalogManager);
if (familiesStr.size() == 1 && familiesStr.get(0).equals(VariantQueryUtils.ALL)) {
@@ -423,7 +421,7 @@ public DataResult familyIndex(String study, List familiesStr, bool
}
DataResult dataResult = engine.familyIndex(study, trios, params);
getSynchronizer(engine).synchronizeCatalogSamplesFromStorage(study, trios.stream()
- .flatMap(t->t.toList().stream())
+ .flatMap(t -> t.toList().stream())
.collect(Collectors.toList()), token);
return dataResult;
});
@@ -439,11 +437,29 @@ public DataResult familyIndexBySamples(String study, Collection sa
throws CatalogException, StorageEngineException {
return secureOperation(VariantFamilyIndexOperationTool.ID, study, params, token, engine -> {
Collection thisSamples = samples;
+ boolean allSamples;
if (CollectionUtils.size(thisSamples) == 1 && thisSamples.iterator().next().equals(ParamConstants.ALL)) {
thisSamples = getIndexedSamples(study, token);
+ allSamples = true;
+ } else {
+ allSamples = false;
}
List trios = catalogUtils.getTriosFromSamples(study, engine.getMetadataManager(), thisSamples, token);
+ if (trios.isEmpty()) {
+ String msg;
+ if (thisSamples.size() > 6) {
+ msg = "No trios found for " + thisSamples.size() + " samples";
+ } else {
+ msg = "No trios found for samples " + thisSamples;
+ }
+ if (allSamples) {
+ logger.info(msg);
+ return new DataResult<>(0, Collections.singletonList(new Event(Event.Type.INFO, msg)), 0, Collections.emptyList(), 0);
+ } else {
+ throw new StorageEngineException(msg);
+ }
+ }
DataResult dataResult = engine.familyIndex(study, trios, params);
getSynchronizer(engine).synchronizeCatalogSamplesFromStorage(study, trios.stream()
.flatMap(t -> t.toList().stream())
@@ -628,6 +644,7 @@ public VariantQueryResult get(Query inputQuery, QueryOptions queryOptio
@SuppressWarnings("unchecked")
public VariantQueryResult get(Query query, QueryOptions queryOptions, String token, Class clazz)
throws CatalogException, IOException, StorageEngineException {
+
VariantQueryResult result = get(query, queryOptions, token);
List variants;
if (clazz == Variant.class) {
@@ -641,16 +658,7 @@ public VariantQueryResult get(Query query, QueryOptions queryOptions, Str
} else {
throw new IllegalArgumentException("Unknown variant format " + clazz);
}
- return new VariantQueryResult<>(
- result.getTime(),
- result.getNumResults(),
- result.getNumMatches(),
- result.getEvents(),
- variants,
- result.getSamples(),
- result.getSource(),
- result.getApproximateCount(),
- result.getApproximateCountSamplingSize(), null);
+ return new VariantQueryResult<>(result, variants);
}
@@ -881,7 +889,7 @@ public DataResult getSampleData(String variant, String study, QueryOpti
VariantQueryResult result = new VariantQueryResult<>(
((int) stopWatch.getTime(TimeUnit.MILLISECONDS)),
- 1, 1, new ArrayList<>(), Collections.singletonList(variantResult), null, null)
+ 1, 1, new ArrayList<>(), Collections.singletonList(variantResult), engine.getStorageEngineId())
.setNumSamples(sampleEntries.size());
if (exactNumSamples) {
result.setApproximateCount(false);
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/operations/VariantDeleteOperationManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/operations/VariantDeleteOperationManager.java
index 550c00b027a..882240d2865 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/operations/VariantDeleteOperationManager.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/operations/VariantDeleteOperationManager.java
@@ -26,6 +26,7 @@
import org.opencb.opencga.storage.core.metadata.models.StudyMetadata;
import org.opencb.opencga.storage.core.metadata.models.TaskMetadata;
import org.opencb.opencga.storage.core.variant.VariantStorageEngine;
+import org.opencb.opencga.storage.core.variant.VariantStorageOptions;
import java.net.URI;
import java.util.ArrayList;
@@ -52,6 +53,7 @@ public void removeStudy(String study, URI outdir, String token) throws CatalogEx
public void removeFile(String study, List inputFiles, URI outdir, String token) throws CatalogException, StorageEngineException {
// Update study metadata BEFORE executing the operation and fetching files from Catalog
+ boolean force = variantStorageEngine.getOptions().getBoolean(VariantStorageOptions.FORCE.key());
StudyMetadata studyMetadata = synchronizeCatalogStudyFromStorage(study, token, true);
List fileNames = new ArrayList<>();
@@ -62,7 +64,15 @@ public void removeFile(String study, List inputFiles, URI outdir, String
if (!catalogIndexStatus.equals(VariantIndexStatus.READY)) {
// Might be partially loaded in VariantStorage. Check FileMetadata
FileMetadata fileMetadata = variantStorageEngine.getMetadataManager().getFileMetadata(studyMetadata.getId(), fileStr);
- if (fileMetadata == null || fileMetadata.getIndexStatus() != TaskMetadata.Status.NONE) {
+ boolean canBeRemoved;
+ if (force) {
+ // When forcing remove, just require the file to be registered in the storage
+ canBeRemoved = fileMetadata != null;
+ } else {
+ // Otherwise, require the file to be in status NONE
+ canBeRemoved = fileMetadata != null && fileMetadata.getIndexStatus() != TaskMetadata.Status.NONE;
+ }
+ if (!canBeRemoved) {
throw new CatalogException("Unable to remove variants from file " + file.getName() + ". "
+ "IndexStatus = " + catalogIndexStatus);
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java
index 042784b844a..5be8325e066 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java
@@ -43,7 +43,7 @@
import org.opencb.opencga.core.models.sample.Sample;
import org.opencb.opencga.core.models.variant.MutationalSignatureAnalysisParams;
import org.opencb.opencga.core.response.OpenCGAResult;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.core.tools.annotations.ToolExecutor;
import org.opencb.opencga.core.tools.variant.MutationalSignatureAnalysisExecutor;
import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateFamilyOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateFamilyOperationTool.java
index c00f4943e08..57efbe0ef60 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateFamilyOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateFamilyOperationTool.java
@@ -25,7 +25,8 @@
@Tool(id = VariantAggregateFamilyOperationTool.ID, description = VariantAggregateFamilyOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantAggregateFamilyOperationTool extends OperationTool {
public static final String ID = "variant-aggregate-family";
public static final String DESCRIPTION = "Find variants where not all the samples are present, and fill the empty values.";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateOperationTool.java
index 49f799500bd..ab28fd9dea4 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAggregateOperationTool.java
@@ -16,14 +16,13 @@
package org.opencb.opencga.analysis.variant.operations;
-import org.opencb.opencga.core.tools.annotations.Tool;
-import org.opencb.opencga.core.models.operations.variant.VariantAggregateParams;
import org.opencb.opencga.core.models.common.Enums;
+import org.opencb.opencga.core.models.operations.variant.VariantAggregateParams;
+import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
-import org.opencb.opencga.storage.core.variant.VariantStorageOptions;
@Tool(id = VariantAggregateOperationTool.ID, description = VariantAggregateOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantAggregateOperationTool extends OperationTool {
public static final String ID = "variant-aggregate";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationDeleteOperationTool.java
index 07f5e396ef7..47d36b85333 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationDeleteOperationTool.java
@@ -24,7 +24,7 @@
@Tool(id = VariantAnnotationDeleteOperationTool.ID, description = VariantAnnotationDeleteOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantAnnotationDeleteOperationTool extends OperationTool {
public static final String ID = "variant-annotation-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationIndexOperationTool.java
index d3405dcaecd..aa08de950c7 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationIndexOperationTool.java
@@ -32,7 +32,8 @@
@Tool(id = VariantAnnotationIndexOperationTool.ID, description = VariantAnnotationIndexOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantAnnotationIndexOperationTool extends OperationTool {
public static final String ID = "variant-annotation-index";
public static final String DESCRIPTION = "Create and load variant annotations into the database";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationRebuilderOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationRebuilderOperationTool.java
index 891838e34b3..b684d612519 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationRebuilderOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationRebuilderOperationTool.java
@@ -22,7 +22,8 @@
@Tool(id = VariantAnnotationRebuilderOperationTool.ID, description = VariantAnnotationRebuilderOperationTool.ID,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantAnnotationRebuilderOperationTool extends OperationTool {
public static final String ID = "variant-annotation-rebuilder";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationSaveOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationSaveOperationTool.java
index 33e400bcb12..9f7994935b0 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationSaveOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantAnnotationSaveOperationTool.java
@@ -23,7 +23,8 @@
@Tool(id = VariantAnnotationSaveOperationTool.ID, description = VariantAnnotationSaveOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantAnnotationSaveOperationTool extends OperationTool {
public static final String ID = "variant-annotation-save";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFamilyIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFamilyIndexOperationTool.java
index c7258c79f74..65dc97676cb 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFamilyIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFamilyIndexOperationTool.java
@@ -31,7 +31,7 @@
@Deprecated
@Tool(id = VariantFamilyIndexOperationTool.ID, description = VariantFamilyIndexOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantFamilyIndexOperationTool extends OperationTool {
public static final String ID = "variant-family-index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileDeleteOperationTool.java
index bb3cb4d3f3a..db2da6c58e4 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileDeleteOperationTool.java
@@ -20,7 +20,7 @@
import org.apache.solr.common.StringUtils;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantFileDeleteParams;
+import org.opencb.opencga.core.models.operations.variant.VariantFileDeleteParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
import org.opencb.opencga.storage.core.variant.VariantStorageOptions;
@@ -33,7 +33,7 @@
* @author Jacobo Coll <jacobo167@gmail.com>
*/
@Tool(id = VariantFileDeleteOperationTool.ID, description = VariantFileDeleteOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantFileDeleteOperationTool extends OperationTool {
public static final String ID = "variant-file-delete";
@@ -55,6 +55,7 @@ protected void check() throws Exception {
throw new ToolException("Missing file/s");
}
params.put(VariantStorageOptions.RESUME.key(), variantFileDeleteParams.isResume());
+ params.put(VariantStorageOptions.FORCE.key(), variantFileDeleteParams.isForce());
}
@Override
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileIndexJobLauncherTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileIndexJobLauncherTool.java
index 1178c9a8081..f45b7011650 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileIndexJobLauncherTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantFileIndexJobLauncherTool.java
@@ -16,8 +16,8 @@
import org.opencb.opencga.core.models.file.FileInternal;
import org.opencb.opencga.core.models.file.VariantIndexStatus;
import org.opencb.opencga.core.models.job.Job;
-import org.opencb.opencga.core.models.variant.VariantFileIndexJobLauncherParams;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
+import org.opencb.opencga.core.models.operations.variant.VariantFileIndexJobLauncherParams;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.response.OpenCGAResult;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
@@ -31,7 +31,7 @@
import static org.opencb.opencga.catalog.db.api.FileDBAdaptor.QueryParams.*;
@Tool(id = VariantFileIndexJobLauncherTool.ID, description = VariantFileIndexJobLauncherTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantFileIndexJobLauncherTool extends OpenCgaToolScopeStudy {
public static final String ID = "variant-index-job-launcher";
@@ -142,7 +142,7 @@ protected void run() throws Exception {
String jobId = buildJobId(file);
Job job = catalogManager.getJobManager().submit(getStudy(), VariantIndexOperationTool.ID, Enums.Priority.MEDIUM,
indexParams.toParams(new ObjectMap(ParamConstants.STUDY_PARAM, study)), jobId, "Job generated by " + getId(),
- Collections.emptyList(), jobTags, getToken()).first();
+ Collections.emptyList(), jobTags, getJobId(), null, false, getToken()).first();
submittedJobs++;
logger.info("[{}] Create variant-index job '{}' for file '{}'{}",
submittedJobs,
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantIndexOperationTool.java
index cce9fc91e8a..d4e7270d2e6 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantIndexOperationTool.java
@@ -17,13 +17,9 @@
package org.opencb.opencga.analysis.variant.operations;
import io.jsonwebtoken.lang.Collections;
-import org.opencb.commons.datastore.core.Query;
-import org.opencb.commons.datastore.core.QueryOptions;
-import org.opencb.opencga.catalog.db.api.FileDBAdaptor;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
-import org.opencb.opencga.core.response.OpenCGAResult;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
import org.opencb.opencga.storage.core.StoragePipelineResult;
@@ -34,14 +30,12 @@
import java.net.URI;
import java.nio.file.Files;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import static org.opencb.opencga.analysis.variant.manager.operations.VariantFileIndexerOperationManager.*;
@Tool(id = VariantIndexOperationTool.ID, description = VariantIndexOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantIndexOperationTool extends OperationTool {
public static final String ID = "variant-index";
public static final String DESCRIPTION = "Index variant files into the variant storage";
@@ -112,9 +106,6 @@ protected void check() throws Exception {
protected List getSteps() {
List steps = new ArrayList<>();
steps.add(getId());
- if (indexParams.isFamily()) {
- steps.add("family-index");
- }
return steps;
}
@@ -155,26 +146,5 @@ protected void run() throws Exception {
}
}
});
-
- if (indexParams.isFamily()) {
- step("family-index", () -> {
- if (inputFiles.isEmpty()) {
- // Nothing to do!
- return;
- }
- OpenCGAResult fileResult = getCatalogManager().getFileManager()
- .search(study,
- new Query(FileDBAdaptor.QueryParams.URI.key(), inputFiles),
- new QueryOptions(QueryOptions.INCLUDE, FileDBAdaptor.QueryParams.SAMPLE_IDS.key()), getToken());
-
- Set samples = new HashSet<>();
- for (org.opencb.opencga.core.models.file.File file : fileResult.getResults()) {
- samples.addAll(file.getSampleIds());
- }
- if (!samples.isEmpty()) {
- variantStorageManager.familyIndexBySamples(study, samples, params, getToken());
- }
- });
- }
}
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantPruneOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantPruneOperationTool.java
index faaee5e681a..f2426fa5f04 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantPruneOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantPruneOperationTool.java
@@ -1,12 +1,12 @@
package org.opencb.opencga.analysis.variant.operations;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantPruneParams;
+import org.opencb.opencga.core.models.operations.variant.VariantPruneParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
@Tool(id = VariantPruneOperationTool.ID, description = VariantPruneOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantPruneOperationTool extends OperationTool {
public static final String DESCRIPTION = "Prune orphan variants from studies in a project.";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSampleDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSampleDeleteOperationTool.java
index 14c456cc592..8c5620291be 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSampleDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSampleDeleteOperationTool.java
@@ -20,7 +20,7 @@
import org.apache.solr.common.StringUtils;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantSampleDeleteParams;
+import org.opencb.opencga.core.models.operations.variant.VariantSampleDeleteParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
import org.opencb.opencga.storage.core.variant.VariantStorageOptions;
@@ -33,7 +33,7 @@
* @author Jacobo Coll <jacobo167@gmail.com>
*/
@Tool(id = VariantSampleDeleteOperationTool.ID, description = VariantSampleDeleteOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantSampleDeleteOperationTool extends OperationTool {
public static final String ID = "variant-sample-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreDeleteOperationTool.java
index b2b6734cf87..a26afb81955 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreDeleteOperationTool.java
@@ -21,7 +21,7 @@
import org.opencb.opencga.core.models.common.Enums;
@Tool(id= VariantScoreDeleteOperationTool.ID,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantScoreDeleteOperationTool extends OperationTool {
public static final String ID = "variant-score-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreIndexOperationTool.java
index d7049df006e..e863a630167 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantScoreIndexOperationTool.java
@@ -16,18 +16,16 @@
package org.opencb.opencga.analysis.variant.operations;
-import org.opencb.opencga.core.tools.annotations.Tool;
-import org.opencb.opencga.core.models.operations.variant.VariantScoreIndexParams;
import org.opencb.opencga.core.common.UriUtils;
import org.opencb.opencga.core.models.common.Enums;
+import org.opencb.opencga.core.models.operations.variant.VariantScoreIndexParams;
+import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.storage.core.variant.score.VariantScoreFormatDescriptor;
import java.net.URI;
-import static org.opencb.opencga.core.api.ParamConstants.STUDY_PARAM;
-
@Tool(id= VariantScoreIndexOperationTool.ID, description = VariantScoreIndexOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantScoreIndexOperationTool extends OperationTool {
public static final String ID = "variant-score-index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryAnnotationIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryAnnotationIndexOperationTool.java
index 24f54414f78..a812c8165c5 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryAnnotationIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryAnnotationIndexOperationTool.java
@@ -23,7 +23,8 @@
@Tool(id = VariantSecondaryAnnotationIndexOperationTool.ID, description = VariantSecondaryAnnotationIndexOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantSecondaryAnnotationIndexOperationTool extends OperationTool {
public static final String ID = "variant-secondary-annotation-index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesDeleteOperationTool.java
index b452fffb820..92e5643dedc 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesDeleteOperationTool.java
@@ -22,7 +22,8 @@
@Tool(id = VariantSecondaryIndexSamplesDeleteOperationTool.ID,
description = VariantSecondaryIndexSamplesDeleteOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
@Deprecated
public class VariantSecondaryIndexSamplesDeleteOperationTool extends OperationTool {
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesOperationTool.java
index e31f32a62a1..9671c0fbda2 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondaryIndexSamplesOperationTool.java
@@ -21,7 +21,7 @@
import org.opencb.opencga.core.models.common.Enums;
@Tool(id = VariantSecondaryIndexSamplesOperationTool.ID,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
@Deprecated
public class VariantSecondaryIndexSamplesOperationTool extends OperationTool {
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondarySampleIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondarySampleIndexOperationTool.java
index d4dd7ab8a89..259433a3b9e 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondarySampleIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantSecondarySampleIndexOperationTool.java
@@ -30,7 +30,7 @@
import java.util.List;
@Tool(id = VariantSecondarySampleIndexOperationTool.ID, description = VariantSecondarySampleIndexOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantSecondarySampleIndexOperationTool extends OperationTool {
public static final String ID = "variant-secondary-sample-index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsDeleteOperationTool.java
index 43124238717..0853cfa5d5c 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsDeleteOperationTool.java
@@ -25,7 +25,8 @@
@Tool(id = VariantStatsDeleteOperationTool.ID, description = VariantStatsDeleteOperationTool.DESCRIPTION,
type = Tool.Type.OPERATION,
scope = Tool.Scope.STUDY,
- resource = Enums.Resource.VARIANT)
+ resource = Enums.Resource.VARIANT,
+ priority = Enums.Priority.HIGH)
public class VariantStatsDeleteOperationTool extends OperationTool {
public static final String ID = "variant-stats-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsIndexOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsIndexOperationTool.java
index adae4198666..4ab8f6c58c9 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsIndexOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStatsIndexOperationTool.java
@@ -39,7 +39,7 @@
* Created by jacobo on 06/03/15.
*/
@Tool(id = VariantStatsIndexOperationTool.ID, resource = Enums.Resource.VARIANT, type = Tool.Type.OPERATION,
- description = VariantStatsIndexOperationTool.DESCRIPTION)
+ description = VariantStatsIndexOperationTool.DESCRIPTION, priority = Enums.Priority.HIGH)
public class VariantStatsIndexOperationTool extends OperationTool {
public final static String ID = "variant-stats-index";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataRepairTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataRepairTool.java
index 47c33107bcf..04606492bff 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataRepairTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataRepairTool.java
@@ -26,7 +26,7 @@
import static org.opencb.opencga.core.models.operations.variant.VariantStorageMetadataRepairToolParams.What.*;
@Tool(id = VariantStorageMetadataRepairTool.ID, description = VariantStorageMetadataRepairTool.DESCRIPTION,
- type = Tool.Type.OPERATION, scope = Tool.Scope.GLOBAL, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, scope = Tool.Scope.GLOBAL, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantStorageMetadataRepairTool extends OperationTool {
public static final String ID = "variant-storage-metadata-repair";
public static final String DESCRIPTION = "Execute some repairs on Variant Storage Metadata. Advanced users only.";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataSynchronizeOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataSynchronizeOperationTool.java
index 6e49349369c..8f7cac4f6a2 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataSynchronizeOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStorageMetadataSynchronizeOperationTool.java
@@ -1,12 +1,12 @@
package org.opencb.opencga.analysis.variant.operations;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantStorageMetadataSynchronizeParams;
+import org.opencb.opencga.core.models.operations.variant.VariantStorageMetadataSynchronizeParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
@Tool(id = VariantStorageMetadataSynchronizeOperationTool.ID, resource = Enums.Resource.VARIANT, type = Tool.Type.OPERATION,
- scope = Tool.Scope.STUDY, description = VariantStorageMetadataSynchronizeOperationTool.DESCRIPTION)
+ scope = Tool.Scope.STUDY, description = VariantStorageMetadataSynchronizeOperationTool.DESCRIPTION, priority = Enums.Priority.HIGH)
public class VariantStorageMetadataSynchronizeOperationTool extends OperationTool {
public static final String ID = "variant-storage-metadata-synchronize";
public static final String DESCRIPTION = "Synchronize catalog with variant storage metadata";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStudyDeleteOperationTool.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStudyDeleteOperationTool.java
index d24a21668e2..baa52c6f2c2 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStudyDeleteOperationTool.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/operations/VariantStudyDeleteOperationTool.java
@@ -19,7 +19,7 @@
import org.apache.solr.common.StringUtils;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.common.Enums;
-import org.opencb.opencga.core.models.variant.VariantStudyDeleteParams;
+import org.opencb.opencga.core.models.operations.variant.VariantStudyDeleteParams;
import org.opencb.opencga.core.tools.annotations.Tool;
import org.opencb.opencga.core.tools.annotations.ToolParams;
import org.opencb.opencga.storage.core.variant.VariantStorageOptions;
@@ -32,7 +32,7 @@
* @author Jacobo Coll <jacobo167@gmail.com>
*/
@Tool(id = VariantStudyDeleteOperationTool.ID, description = VariantStudyDeleteOperationTool.DESCRIPTION,
- type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT)
+ type = Tool.Type.OPERATION, resource = Enums.Resource.VARIANT, priority = Enums.Priority.HIGH)
public class VariantStudyDeleteOperationTool extends OperationTool {
public static final String ID = "variant-study-delete";
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/executors/DockerWrapperAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/executors/DockerWrapperAnalysisExecutor.java
index ae2b5072473..d68f363b36d 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/executors/DockerWrapperAnalysisExecutor.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/executors/DockerWrapperAnalysisExecutor.java
@@ -31,6 +31,8 @@ public abstract class DockerWrapperAnalysisExecutor extends OpenCgaToolExecutor
public static final String STDOUT_FILENAME = "stdout.txt";
public static final String STDERR_FILENAME = "stderr.txt";
+ public static final String DOCKER_CLI_MSG = "Docker CLI: ";
+
public String getDockerImageName() {
return "opencb/opencga-ext-tools";
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysis.java
index 3d8253861a4..c4a9d87d4f7 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysis.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysis.java
@@ -19,6 +19,7 @@
import org.apache.commons.lang3.StringUtils;
import org.opencb.opencga.analysis.tools.OpenCgaToolScopeStudy;
import org.opencb.opencga.core.exceptions.ToolException;
+import org.opencb.opencga.core.models.clinical.ClinicalAnalysis;
import org.opencb.opencga.core.models.clinical.ExomiserWrapperParams;
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.tools.annotations.Tool;
@@ -52,6 +53,7 @@ protected void run() throws Exception {
getToolExecutor(ExomiserWrapperAnalysisExecutor.class)
.setStudyId(study)
.setSampleId(analysisParams.getSample())
+ .setClinicalAnalysisType(ClinicalAnalysis.Type.valueOf(analysisParams.getClinicalAnalysisType()))
.execute();
});
}
diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java
index 86bb3760b3c..a6325932fb9 100644
--- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java
+++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java
@@ -18,6 +18,7 @@
import org.opencb.opencga.catalog.managers.FamilyManager;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.exceptions.ToolExecutorException;
+import org.opencb.opencga.core.models.clinical.ClinicalAnalysis;
import org.opencb.opencga.core.models.family.Family;
import org.opencb.opencga.core.models.individual.Individual;
import org.opencb.opencga.core.tools.annotations.ToolExecutor;
@@ -50,6 +51,7 @@ public class ExomiserWrapperAnalysisExecutor extends DockerWrapperAnalysisExecut
private String studyId;
private String sampleId;
+ private ClinicalAnalysis.Type clinicalAnalysisType;
private Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -100,22 +102,24 @@ public void run() throws ToolException {
// Check multi-sample (family) analysis
File pedigreeFile = null;
Pedigree pedigree = null;
- if (individual.getMother() != null && individual.getMother().getId() != null
- && individual.getFather() != null && individual.getFather().getId() != null) {
- Family family = IndividualQcUtils.getFamilyByIndividualId(getStudyId(), individual.getId(),
- getVariantStorageManager().getCatalogManager(), getToken());
- if (family != null) {
- pedigree = FamilyManager.getPedigreeFromFamily(family, individual.getId());
- }
-
- if (pedigree != null) {
- if (individual.getFather() != null) {
- samples.add(individual.getFather().getSamples().get(0).getId());
+ if (clinicalAnalysisType == ClinicalAnalysis.Type.FAMILY) {
+ if (individual.getMother() != null && individual.getMother().getId() != null
+ && individual.getFather() != null && individual.getFather().getId() != null) {
+ Family family = IndividualQcUtils.getFamilyByIndividualId(getStudyId(), individual.getId(),
+ getVariantStorageManager().getCatalogManager(), getToken());
+ if (family != null) {
+ pedigree = FamilyManager.getPedigreeFromFamily(family, individual.getId());
}
- if (individual.getMother() != null) {
- samples.add(individual.getMother().getSamples().get(0).getId());
+
+ if (pedigree != null) {
+ if (individual.getFather() != null) {
+ samples.add(individual.getFather().getSamples().get(0).getId());
+ }
+ if (individual.getMother() != null) {
+ samples.add(individual.getMother().getSamples().get(0).getId());
+ }
+ pedigreeFile = createPedigreeFile(family, pedigree);
}
- pedigreeFile = createPedigreeFile(family, pedigree);
}
}
File sampleFile = createSampleFile(individual, hpos, pedigree);
@@ -192,7 +196,9 @@ public void run() throws ToolException {
.append(" --spring.config.location=/jobdir/").append(EXOMISER_PROPERTIES_TEMPLATE_FILENAME);
// Execute command and redirect stdout and stderr to the files
- logger.info("{}: Docker command line: {}", ID, sb);
+ String msg = DOCKER_CLI_MSG + sb;
+ logger.info(msg);
+ addWarning(msg);
runCommandLine(sb.toString());
}
@@ -483,4 +489,13 @@ public ExomiserWrapperAnalysisExecutor setSampleId(String sampleId) {
this.sampleId = sampleId;
return this;
}
+
+ public ClinicalAnalysis.Type getClinicalAnalysisType() {
+ return clinicalAnalysisType;
+ }
+
+ public ExomiserWrapperAnalysisExecutor setClinicalAnalysisType(ClinicalAnalysis.Type clinicalAnalysisType) {
+ this.clinicalAnalysisType = clinicalAnalysisType;
+ return this;
+ }
}
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/alignment/AlignmentAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/alignment/AlignmentAnalysisTest.java
index bdc744fc49c..9339ddf40e2 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/alignment/AlignmentAnalysisTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/alignment/AlignmentAnalysisTest.java
@@ -16,10 +16,7 @@
package org.opencb.opencga.analysis.alignment;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.*;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -37,8 +34,11 @@
import org.opencb.opencga.core.config.storage.StorageConfiguration;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.alignment.AlignmentGeneCoverageStatsParams;
+import org.opencb.opencga.core.models.alignment.AlignmentIndexParams;
+import org.opencb.opencga.core.models.alignment.CoverageIndexParams;
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.file.FileLinkParams;
+import org.opencb.opencga.core.models.file.FileRelatedFile;
import org.opencb.opencga.core.models.organizations.OrganizationCreateParams;
import org.opencb.opencga.core.models.organizations.OrganizationUpdateParams;
import org.opencb.opencga.core.models.user.User;
@@ -49,9 +49,11 @@
import org.opencb.opencga.storage.hadoop.variant.HadoopVariantStorageTest;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -259,7 +261,6 @@ public void setUpCatalogManager() throws CatalogException {
// assertEquals(2, individual.getSamples().size());
}
-
@Test
public void geneCoverageStatsTest() throws IOException, ToolException, CatalogException {
Path outdir = Paths.get(opencga.createTmpOutdir("_genecoveragestats"));
@@ -277,7 +278,7 @@ public void geneCoverageStatsTest() throws IOException, ToolException, CatalogEx
String geneName = "BRCA2";
params.setGenes(Arrays.asList(geneName));
- toolRunner.execute(AlignmentGeneCoverageStatsAnalysis.class, params, new ObjectMap(), outdir, null, token);
+ toolRunner.execute(AlignmentGeneCoverageStatsAnalysis.class, params, new ObjectMap(), outdir, "coverage-job-id", false, token);
bamFile = catalogManager.getFileManager().link(STUDY, new FileLinkParams(bamFilename, "", "", "", null, null, null,
null, null), false, token).first();
@@ -285,4 +286,150 @@ public void geneCoverageStatsTest() throws IOException, ToolException, CatalogEx
assertEquals(geneName, bamFile.getQualityControl().getCoverage().getGeneCoverageStats().get(0).getGeneName());
assertEquals(10, bamFile.getQualityControl().getCoverage().getGeneCoverageStats().get(0).getStats().size());
}
+
+ @Test
+ public void testNonReadOnlyAlignmentIndex() throws Exception {
+ Path nonReadOnlyDir = Paths.get(opencga.createTmpOutdir("_non_readonly_alignment_index"));
+ Path bamPath = Paths.get(opencga.getResourceUri("biofiles/HG00096.chrom20.small.bam").getPath());
+ String bamFilename = "NonReadOnlyAligmentIndex_" + bamPath.getFileName();
+ Files.copy(bamPath, nonReadOnlyDir.resolve(bamFilename));
+
+ File bamFile = catalogManager.getFileManager().link(STUDY, new FileLinkParams(nonReadOnlyDir.resolve(bamFilename).toAbsolutePath().toString(), "non_readonly_alignment_index", "", "", null, null, null,
+ null, null), true, token).first();
+
+ // Run alignment index
+ AlignmentIndexParams params = new AlignmentIndexParams();
+ params.setFileId(bamFile.getId());
+ Path alignmentIndexOutdir = Paths.get(opencga.createTmpOutdir("_alignment_index"));
+ toolRunner.execute(AlignmentIndexOperation.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), alignmentIndexOutdir, "jobId-non-readonly-coverage-index", false, token);
+
+ // Checking BAI file
+ Path baiPath = nonReadOnlyDir.resolve(bamFilename + AlignmentConstants.BAI_EXTENSION);
+ Assert.assertTrue(Files.exists(baiPath));
+
+ // Checking BAI file is registered in the BAM file internals
+ File baiFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFilename + AlignmentConstants.BAI_EXTENSION), QueryOptions.empty(), true, token).first();
+ bamFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFile.getId()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(baiFile.getId(), bamFile.getInternal().getAlignment().getIndex().getFileId());
+ }
+
+ @Test
+ public void testReadOnlyAlignmentIndex() throws Exception {
+ Path readOnlyDir = Paths.get(opencga.createTmpOutdir("_readonly_for_alignment_index"));
+ Path bamPath = Paths.get(opencga.getResourceUri("biofiles/HG00096.chrom20.small.bam").getPath());
+ String bamFilename = "ReadOnlyAligmentIndex_" + bamPath.getFileName();
+ Files.copy(bamPath, readOnlyDir.resolve(bamFilename));
+
+ // Make read-only
+ Runtime.getRuntime().exec("chmod 555 " + readOnlyDir.toAbsolutePath());
+
+ File bamFile = catalogManager.getFileManager().link(STUDY, new FileLinkParams(readOnlyDir.resolve(bamFilename).toAbsolutePath().toString(), "readonly_alignment_index", "", "", null, null, null,
+ null, null), true, token).first();
+
+ // Run alignment index
+ AlignmentIndexParams params = new AlignmentIndexParams();
+ params.setFileId(bamFile.getId());
+ Path alignmentIndexOutdir = Paths.get(opencga.createTmpOutdir("_alignment_index"));
+ toolRunner.execute(AlignmentIndexOperation.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), alignmentIndexOutdir, "jobId-readonly-coverage-index", false, token);
+
+ // Checking BAI file
+ Path baiPath = alignmentIndexOutdir.resolve(bamFilename + AlignmentConstants.BAI_EXTENSION);
+ Assert.assertTrue(Files.exists(baiPath));
+
+ // Checking BAI file is registered in the BAM file internals
+ File baiFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFilename + AlignmentConstants.BAI_EXTENSION), QueryOptions.empty(), true, token).first();
+ bamFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFile.getId()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(baiFile.getId(), bamFile.getInternal().getAlignment().getIndex().getFileId());
+
+ Runtime.getRuntime().exec("chmod 777 " + readOnlyDir.toAbsolutePath());
+ }
+
+ @Test
+ public void testNonReadOnlyCoverageIndex() throws Exception {
+ Path nonReadOnlyDir = Paths.get(opencga.createTmpOutdir("_non_readonly_for_coverage_index"));
+ Path bamPath = Paths.get(opencga.getResourceUri("biofiles/HG00096.chrom20.small.bam").getPath());
+ String bamFilename = "NonReadOnlyCoverageIndex_" + bamPath.getFileName();
+ Files.copy(bamPath, nonReadOnlyDir.resolve(bamFilename));
+
+ File bamFile = catalogManager.getFileManager().link(STUDY, new FileLinkParams(nonReadOnlyDir.resolve(bamFilename).toAbsolutePath().toString(), "non_readonly_alignment_coverage_index", "", "", null, null, null,
+ null, null), true, token).first();
+
+ // Run alignment index
+ AlignmentIndexParams indexParams = new AlignmentIndexParams();
+ indexParams.setFileId(bamFile.getId());
+ Path alignmentIndexOutdir = Paths.get(opencga.createTmpOutdir("_alignment_index"));
+ toolRunner.execute(AlignmentIndexOperation.class, indexParams, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), alignmentIndexOutdir, "jobId-non-readonly-alignment-coverage-index", false, token);
+
+ // Checking BAI file
+ Path baiPath = nonReadOnlyDir.resolve(bamFilename + AlignmentConstants.BAI_EXTENSION);
+ Assert.assertTrue(Files.exists(baiPath));
+
+ // Checking BAI file is registered in the BAM file internals
+ File baiFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFilename + AlignmentConstants.BAI_EXTENSION), QueryOptions.empty(), true, token).first();
+ bamFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFile.getId()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(baiFile.getId(), bamFile.getInternal().getAlignment().getIndex().getFileId());
+
+ // Run coverage index
+ CoverageIndexParams coverageOarams = new CoverageIndexParams();
+ coverageOarams.setBamFileId(bamFile.getId());
+ coverageOarams.setBaiFileId(baiFile.getId());
+ Path coverageIndexOutdir = Paths.get(opencga.createTmpOutdir("_coverage_index"));
+ toolRunner.execute(AlignmentCoverageAnalysis.class, coverageOarams, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), coverageIndexOutdir, "jobId-readonly-coverage-index", false, token);
+
+ // Checking BW file
+ Path bwPath = nonReadOnlyDir.resolve(bamFilename + AlignmentConstants.BIGWIG_EXTENSION);
+ Assert.assertTrue(Files.exists(bwPath));
+
+ // Checking BAM file is registered in the related files of BW file
+ File bwFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bwPath.getFileName().toString()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(bamFile.getId(), bwFile.getRelatedFiles().get(0).getFile().getId());
+ Assert.assertEquals(FileRelatedFile.Relation.ALIGNMENT, bwFile.getRelatedFiles().get(0).getRelation());
+ }
+
+ @Test
+ public void testReadOnlyCoverageIndex() throws Exception {
+ Path readOnlyDir = Paths.get(opencga.createTmpOutdir("_readonly_for_coverage_index"));
+ Path bamPath = Paths.get(opencga.getResourceUri("biofiles/HG00096.chrom20.small.bam").getPath());
+ String bamFilename = "ReadOnlyCoverageIndex_" + bamPath.getFileName();
+ Files.copy(bamPath, readOnlyDir.resolve(bamFilename));
+
+ File bamFile = catalogManager.getFileManager().link(STUDY, new FileLinkParams(readOnlyDir.resolve(bamFilename).toAbsolutePath().toString(), "readonly_alignment_coverage_index", "", "", null, null, null,
+ null, null), true, token).first();
+
+ // Run alignment index
+ AlignmentIndexParams indexParams = new AlignmentIndexParams();
+ indexParams.setFileId(bamFile.getId());
+ Path alignmentIndexOutdir = Paths.get(opencga.createTmpOutdir("_alignment_index"));
+ toolRunner.execute(AlignmentIndexOperation.class, indexParams, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), alignmentIndexOutdir, "jobId-readonly-coverage-index", false, token);
+
+ // Checking BAI file
+ Path baiPath = readOnlyDir.resolve(bamFilename + AlignmentConstants.BAI_EXTENSION);
+ Assert.assertTrue(Files.exists(baiPath));
+
+ // Checking BAI file is registered in the BAM file internals
+ File baiFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFilename + AlignmentConstants.BAI_EXTENSION), QueryOptions.empty(), true, token).first();
+ bamFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bamFile.getId()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(baiFile.getId(), bamFile.getInternal().getAlignment().getIndex().getFileId());
+
+ // Make read-only
+ Runtime.getRuntime().exec("chmod 555 " + readOnlyDir.toAbsolutePath());
+
+ // Run coverage index
+ CoverageIndexParams coverageOarams = new CoverageIndexParams();
+ coverageOarams.setBamFileId(bamFile.getId());
+ coverageOarams.setBaiFileId(baiFile.getId());
+ Path coverageIndexOutdir = Paths.get(opencga.createTmpOutdir("_coverage_index"));
+ toolRunner.execute(AlignmentCoverageAnalysis.class, coverageOarams, new ObjectMap(ParamConstants.STUDY_PARAM, STUDY), coverageIndexOutdir, "jobId-readonly-coverage-index", false, token);
+
+ // Checking BW file
+ Path bwPath = coverageIndexOutdir.resolve(bamFilename + AlignmentConstants.BIGWIG_EXTENSION);
+ Assert.assertTrue(Files.exists(bwPath));
+
+ // Checking BAM file is registered in the related files of BW file
+ File bwFile = catalogManager.getFileManager().get(STUDY, Collections.singletonList(bwPath.getFileName().toString()), QueryOptions.empty(), true, token).first();
+ Assert.assertEquals(bamFile.getId(), bwFile.getRelatedFiles().get(0).getFile().getId());
+ Assert.assertEquals(FileRelatedFile.Relation.ALIGNMENT, bwFile.getRelatedFiles().get(0).getRelation());
+
+ Runtime.getRuntime().exec("chmod 777 " + readOnlyDir.toAbsolutePath());
+ }
}
\ No newline at end of file
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalAnalysisUtilsTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalAnalysisUtilsTest.java
index 26bf31c9dfc..f77a1025377 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalAnalysisUtilsTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalAnalysisUtilsTest.java
@@ -76,6 +76,10 @@ public static AbstractClinicalManagerTest getClinicalTest(OpenCGATestExternalRes
variantStorageManager.index(clinicalTest.studyFqn, "HG005.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
variantStorageManager.index(clinicalTest.studyFqn, "HG006.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
variantStorageManager.index(clinicalTest.studyFqn, "HG007.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
+ variantStorageManager.index(clinicalTest.studyFqn, "HG104.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
+ variantStorageManager.index(clinicalTest.studyFqn, "HG105.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
+ variantStorageManager.index(clinicalTest.studyFqn, "HG106.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
+ variantStorageManager.index(clinicalTest.studyFqn, "HG107.1k.vcf.gz", outDir.toString(), storageOptions, clinicalTest.token);
return clinicalTest;
}
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationAnalysisTest.java
index dae59da96c3..73235db4d6d 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationAnalysisTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/ClinicalInterpretationAnalysisTest.java
@@ -48,6 +48,7 @@
import org.opencb.opencga.core.response.OpenCGAResult;
import org.opencb.opencga.core.testclassification.duration.MediumTests;
import org.opencb.opencga.core.tools.result.ExecutionResult;
+import org.opencb.opencga.storage.core.variant.adaptors.VariantQuery;
import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam;
import java.io.File;
@@ -138,8 +139,11 @@ public void customAnalysisFromClinicalAnalysisTest() throws Exception {
.setConfig(config);
ExecutionResult result = customAnalysis.start();
-
- checkInterpretation(238, result);
+ int expected = opencga.getVariantStorageManager().get(new VariantQuery(query),
+ new QueryOptions(QueryOptions.LIMIT, 500), clinicalTest.token)
+ .getResults().size();
+ assertNotEquals(0, expected);
+ checkInterpretation(expected, result);
}
@Test
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysisTest.java
index 387b439571b..441f03d06a3 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysisTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/clinical/exomiser/ExomiserInterpretationAnalysisTest.java
@@ -1,17 +1,18 @@
package org.opencb.opencga.analysis.clinical.exomiser;
-import org.junit.After;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.*;
+import org.opencb.biodata.models.clinical.interpretation.ClinicalVariant;
import org.opencb.biodata.models.variant.Variant;
import org.opencb.biodata.models.variant.exceptions.NonStandardCompliantSampleField;
import org.opencb.biodata.tools.variant.VariantNormalizer;
import org.junit.experimental.categories.Category;
+import org.opencb.commons.datastore.core.Event;
import org.opencb.commons.datastore.core.ObjectMap;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.opencga.analysis.clinical.ClinicalAnalysisUtilsTest;
import org.opencb.opencga.analysis.variant.OpenCGATestExternalResource;
+import org.opencb.opencga.analysis.wrappers.executors.DockerWrapperAnalysisExecutor;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.catalog.managers.AbstractClinicalManagerTest;
import org.opencb.opencga.core.exceptions.ToolException;
@@ -24,8 +25,11 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
+import static com.mongodb.assertions.Assertions.assertFalse;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -47,8 +51,8 @@ public static void setUp() throws Exception {
clinicalTest = ClinicalAnalysisUtilsTest.getClinicalTest(opencga);
}
- @After
- public void tearDown() throws Exception {
+ @AfterClass
+ public static void tearDown() throws Exception {
opencga.clear();
}
@@ -68,7 +72,7 @@ public void testNormalization() throws NonStandardCompliantSampleField {
}
@Test
- public void singleExomiserAnalysis() throws IOException, CatalogException, ToolException {
+ public void singleSingleExomiserAnalysis() throws IOException, CatalogException, ToolException {
assumeThat(Paths.get("/opt/opencga/analysis/resources/exomiser").toFile().exists(), is(true));
prepareExomiserData();
@@ -92,14 +96,30 @@ public void singleExomiserAnalysis() throws IOException, CatalogException, ToolE
.get(clinicalTest.studyFqn, clinicalTest.CA_ID2, QueryOptions.empty(), clinicalTest.token).first();
assertEquals(1, clinicalAnalysis.getSecondaryInterpretations().size());
assertTrue(clinicalAnalysis.getSecondaryInterpretations().get(0).getPrimaryFindings().size() > 0);
+
+ // Check Exomiser docker CLI
+ boolean pedFound = false;
+ for (Event event : result.getEvents()) {
+ if (event.getType() == Event.Type.WARNING && StringUtils.isNotEmpty(event.getMessage())
+ && event.getMessage().startsWith(DockerWrapperAnalysisExecutor.DOCKER_CLI_MSG)) {
+ List splits = Arrays.asList(event.getMessage().split(" "));
+ pedFound = splits.contains("--ped") && splits.contains("/jobdir/" + clinicalTest.PROBAND_ID2 + ".ped");
+ }
+ }
+ assertFalse(pedFound);
+
+ // Only proband sample is returned in primary findings
+ for (ClinicalVariant cv : clinicalAnalysis.getInterpretation().getPrimaryFindings()) {
+ assertEquals(1, cv.getStudies().get(0).getSamples().size());
+ }
}
@Test
- public void familyExomiserAnalysis() throws IOException, CatalogException, ToolException {
+ public void trioFamilyExomiserAnalysis() throws IOException, CatalogException, ToolException {
assumeThat(Paths.get("/opt/opencga/analysis/resources/exomiser").toFile().exists(), is(true));
prepareExomiserData();
- outDir = Paths.get(opencga.createTmpOutdir("_interpretation_analysis_family"));
+ outDir = Paths.get(opencga.createTmpOutdir("_interpretation_analysis_trio_family"));
ClinicalAnalysis clinicalAnalysis = clinicalTest.catalogManager.getClinicalAnalysisManager()
.get(clinicalTest.studyFqn, clinicalTest.CA_ID3, QueryOptions.empty(), clinicalTest.token).first();
@@ -118,6 +138,67 @@ public void familyExomiserAnalysis() throws IOException, CatalogException, ToolE
.get(clinicalTest.studyFqn, clinicalTest.CA_ID3, QueryOptions.empty(), clinicalTest.token).first();
assertEquals(1, clinicalAnalysis.getSecondaryInterpretations().size());
assertTrue(clinicalAnalysis.getSecondaryInterpretations().get(0).getPrimaryFindings().size() > 0);
+
+ // Check Exomiser docker CLI
+ boolean pedFound = false;
+ for (Event event : result.getEvents()) {
+ if (event.getType() == Event.Type.WARNING && StringUtils.isNotEmpty(event.getMessage())
+ && event.getMessage().startsWith(DockerWrapperAnalysisExecutor.DOCKER_CLI_MSG)) {
+ List splits = Arrays.asList(event.getMessage().split(" "));
+ pedFound = splits.contains("--ped") && splits.contains("/jobdir/" + clinicalTest.PROBAND_ID3 + ".ped");
+ }
+ }
+ assertTrue(pedFound);
+
+ // All family samples are returned in primary findings
+ for (ClinicalVariant cv : clinicalAnalysis.getInterpretation().getPrimaryFindings()) {
+ assertEquals(4, cv.getStudies().get(0).getSamples().size());
+ }
+
+ System.out.println("results at out dir = " + outDir.toAbsolutePath());
+ }
+
+ @Test
+ public void trioSingleExomiserAnalysis() throws IOException, CatalogException, ToolException {
+ assumeThat(Paths.get("/opt/opencga/analysis/resources/exomiser").toFile().exists(), is(true));
+
+ prepareExomiserData();
+ outDir = Paths.get(opencga.createTmpOutdir("_interpretation_analysis_trio_single"));
+
+ ClinicalAnalysis clinicalAnalysis = clinicalTest.catalogManager.getClinicalAnalysisManager()
+ .get(clinicalTest.studyFqn, clinicalTest.CA_ID4, QueryOptions.empty(), clinicalTest.token).first();
+ assertEquals(0, clinicalAnalysis.getSecondaryInterpretations().size());
+
+ ExomiserInterpretationAnalysis exomiser = new ExomiserInterpretationAnalysis();
+
+ exomiser.setUp(opencga.getOpencgaHome().toAbsolutePath().toString(), new ObjectMap(), outDir, clinicalTest.token);
+ exomiser.setStudyId(clinicalTest.studyFqn)
+ .setClinicalAnalysisId(clinicalTest.CA_ID4);
+
+ ExecutionResult result = exomiser.start();
+
+ // Refresh clinical analysis
+ clinicalAnalysis = clinicalTest.catalogManager.getClinicalAnalysisManager()
+ .get(clinicalTest.studyFqn, clinicalTest.CA_ID4, QueryOptions.empty(), clinicalTest.token).first();
+ assertEquals(1, clinicalAnalysis.getSecondaryInterpretations().size());
+ assertTrue(clinicalAnalysis.getSecondaryInterpretations().get(0).getPrimaryFindings().size() > 0);
+
+ // Check Exomiser docker CLI
+ boolean pedFound = false;
+ for (Event event : result.getEvents()) {
+ if (event.getType() == Event.Type.WARNING && StringUtils.isNotEmpty(event.getMessage())
+ && event.getMessage().startsWith(DockerWrapperAnalysisExecutor.DOCKER_CLI_MSG)) {
+ List splits = Arrays.asList(event.getMessage().split(" "));
+ pedFound = splits.contains("--ped") && splits.contains("/jobdir/" + clinicalTest.PROBAND_ID4 + ".ped");
+ }
+ }
+ assertFalse(pedFound);
+
+ // Only proband sample is returned in primary findings
+ for (ClinicalVariant cv : clinicalAnalysis.getInterpretation().getPrimaryFindings()) {
+ assertEquals(1, cv.getStudies().get(0).getSamples().size());
+ }
+
System.out.println("results at out dir = " + outDir.toAbsolutePath());
}
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/family/FamilyAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/family/FamilyAnalysisTest.java
index af5c8d9be8e..91ac3624471 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/family/FamilyAnalysisTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/family/FamilyAnalysisTest.java
@@ -202,7 +202,7 @@ public void testPedigreeGraphAnalysis() throws ToolException, IOException {
params.setFamilyId(family.getId());
toolRunner.execute(PedigreeGraphAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, studyId), outDir, null,
- sessionIdUser);
+ false, sessionIdUser);
String b64Image = PedigreeGraphUtils.getB64Image(outDir);
MatcherAssert.assertThat(b64Image, CoreMatchers.startsWith("iVBORw0KGgoAAAANSUhEUgAAAeAAAAHg"));
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/rga/RgaManagerTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/rga/RgaManagerTest.java
index 4fa44f7cd98..74cc8339db8 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/rga/RgaManagerTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/rga/RgaManagerTest.java
@@ -165,7 +165,7 @@ public void setUp() throws Throwable {
KnockoutAnalysisParams params = new KnockoutAnalysisParams();
params.setSample(file.getSampleIds());
- toolRunner.execute(KnockoutAnalysis.class, params.toObjectMap(), outDir, null, ownerToken);
+ toolRunner.execute(KnockoutAnalysis.class, params.toObjectMap(), outDir, null, false, ownerToken);
File file = catalogManager.getFileManager().link(STUDY,
new FileLinkParams()
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/OpenCGATestExternalResource.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/OpenCGATestExternalResource.java
index 1f05dfc5dd3..5c5956d7cf7 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/OpenCGATestExternalResource.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/OpenCGATestExternalResource.java
@@ -214,8 +214,6 @@ public Path isolateOpenCGA() throws IOException {
Files.createDirectories(conf);
Files.createDirectories(userHome);
- catalogManagerExternalResource.getConfiguration().getAdmin().setSecretKey(null);
- catalogManagerExternalResource.getConfiguration().getAdmin().setAlgorithm(null);
catalogManagerExternalResource.getConfiguration().serialize(
new FileOutputStream(conf.resolve("configuration.yml").toFile()));
InputStream inputStream = StorageManager.class.getClassLoader().getResourceAsStream("storage-configuration.yml");
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java
index 59d2ba43d5d..c91909d3abb 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java
@@ -74,6 +74,7 @@
import org.opencb.opencga.core.models.individual.Individual;
import org.opencb.opencga.core.models.individual.IndividualInternal;
import org.opencb.opencga.core.models.individual.Location;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.models.organizations.OrganizationCreateParams;
import org.opencb.opencga.core.models.organizations.OrganizationUpdateParams;
import org.opencb.opencga.core.models.project.ProjectCreateParams;
@@ -313,7 +314,7 @@ public void testMalformedVcfFileIndex() throws Exception {
try {
toolRunner.execute(VariantIndexOperationTool.class,
new VariantIndexParams().setFile(file.getId()).setAnnotate(true),
- Paths.get(opencga.createTmpOutdir()), null, token);
+ Paths.get(opencga.createTmpOutdir()), null, false, token);
} catch (ToolException e) {
System.out.println(ExceptionUtils.prettyExceptionMessage(e, true, true));
}
@@ -329,7 +330,7 @@ public void testVariantStats() throws Exception {
VariantStatsAnalysis variantStatsAnalysis = new VariantStatsAnalysis()
.setStudy(STUDY)
.setSamples(samples.subList(1, 3));
- variantStatsAnalysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ variantStatsAnalysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
ExecutionResult ar = variantStatsAnalysis.start();
checkExecutionResult(ar);
@@ -354,7 +355,7 @@ public void testVariantStatsTwoCohorts() throws Exception {
VariantStatsAnalysis variantStatsAnalysis = new VariantStatsAnalysis()
.setStudy(STUDY)
.setCohort(Arrays.asList("c1", "c2"));
- variantStatsAnalysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ variantStatsAnalysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
ExecutionResult ar = variantStatsAnalysis.start();
checkExecutionResult(ar);
@@ -381,7 +382,7 @@ public void testVariantStatsWithFilter() throws Exception {
VariantStatsAnalysisParams params = new VariantStatsAnalysisParams()
.setSamples(samples.subList(1, 3))
.setRegion(region);
- ExecutionResult ar = toolRunner.execute(VariantStatsAnalysis.class, STUDY, params, outDir, "", token);
+ ExecutionResult ar = toolRunner.execute(VariantStatsAnalysis.class, STUDY, params, outDir, "", false, token);
checkExecutionResult(ar);
MutableInt count = new MutableInt();
@@ -479,7 +480,7 @@ private ExecutionResult sampleVariantStats(String region, String indexId, boolea
params.getVariantQuery()
.appendQuery(query)
.setRegion(region);
- ExecutionResult result = toolRunner.execute(SampleVariantStatsAnalysis.class, STUDY, params, outDir, null, token);
+ ExecutionResult result = toolRunner.execute(SampleVariantStatsAnalysis.class, STUDY, params, outDir, null, false, token);
if (nothingToDo) {
assertEquals("All samples stats indexed. Nothing to do!", result.getEvents().get(0).getMessage());
@@ -515,7 +516,7 @@ public void testCohortStats() throws Exception {
CohortVariantStatsAnalysis analysis = new CohortVariantStatsAnalysis();
Path outDir = Paths.get(opencga.createTmpOutdir("_cohort_stats"));
System.out.println("output = " + outDir.toAbsolutePath());
- analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
List samples = file.getSampleIds();
analysis.setStudy(STUDY)
.setSamplesQuery(new Query(SampleDBAdaptor.QueryParams.ID.key(), samples.subList(0, 3)));
@@ -532,7 +533,7 @@ public void testCohortStatsIndex() throws Exception {
.setIndex(true);
ExecutionResult result = toolRunner.execute(CohortVariantStatsAnalysis.class, STUDY, toolParams,
- outDir, null, token);
+ outDir, null, false, token);
checkExecutionResult(result, storageEngine.equals(HadoopVariantStorageEngine.STORAGE_ENGINE_ID));
Cohort cohort = catalogManager.getCohortManager().get(STUDY, StudyEntry.DEFAULT_COHORT, new QueryOptions(), token).first();
@@ -556,7 +557,7 @@ public void testCohortStatsIndex() throws Exception {
outDir = Paths.get(opencga.createTmpOutdir("_cohort_stats_index_2"));
System.out.println("output = " + outDir.toAbsolutePath());
- result = toolRunner.execute(CohortVariantStatsAnalysis.class, STUDY, toolParams, outDir, null, token);
+ result = toolRunner.execute(CohortVariantStatsAnalysis.class, STUDY, toolParams, outDir, null, false, token);
checkExecutionResult(result, storageEngine.equals(HadoopVariantStorageEngine.STORAGE_ENGINE_ID));
@@ -579,7 +580,7 @@ public void testExport() throws Exception {
variantExportParams.setOutputFileName("chr22.vcf");
toolRunner.execute(VariantExportTool.class,
- variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
assertTrue(outDir.resolve(variantExportParams.getOutputFileName() + ".gz").toFile().exists());
}
@@ -594,7 +595,7 @@ public void testExportVep() throws Exception {
variantExportParams.setOutputFileName("chr1-5-22");
variantExportParams.setOutputFileFormat(VariantWriterFactory.VariantOutputFormat.ENSEMBL_VEP.name());
toolRunner.execute(VariantExportTool.class,
- variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
}
@Test
@@ -614,7 +615,7 @@ public void testExportTped() throws Exception {
variantExportParams.setInclude("id,studies.samples");
toolRunner.execute(VariantExportTool.class,
- variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ variantExportParams.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
System.out.println(outDir);
Path tped = outDir.resolve(variantExportParams.getOutputFileName() + ".tped");
@@ -635,7 +636,7 @@ public void testGwas() throws Exception {
GwasAnalysis analysis = new GwasAnalysis();
Path outDir = Paths.get(opencga.createTmpOutdir("_gwas"));
System.out.println("output = " + outDir.toAbsolutePath());
- analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
List samples = file.getSampleIds();
analysis.setStudy(STUDY)
.setCaseCohortSamplesQuery(new Query(SampleDBAdaptor.QueryParams.ID.key(), samples.subList(0, 2)))
@@ -649,7 +650,7 @@ public void testGwasByPhenotype() throws Exception {
GwasAnalysis analysis = new GwasAnalysis();
Path outDir = Paths.get(opencga.createTmpOutdir("_gwas_phenotype"));
System.out.println("output = " + outDir.toAbsolutePath());
- analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
analysis.setStudy(STUDY)
.setPhenotype(PHENOTYPE_NAME);
@@ -664,7 +665,7 @@ public void testKnockoutGenes() throws Exception {
params.setSample(file.getSampleIds());
ExecutionResult er = toolRunner.execute(KnockoutAnalysis.class,
- params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
checkExecutionResult(er, false);
}
@@ -679,7 +680,7 @@ public void testKnockoutGenesSpecificGenes() throws Exception {
ExecutionResult er = toolRunner.execute(KnockoutAnalysis.class,
params.toObjectMap()
.append(ParamConstants.STUDY_PARAM, STUDY)
- .append("executionMethod", "byGene"), outDir, null, token);
+ .append("executionMethod", "byGene"), outDir, null, false, token);
checkExecutionResult(er, false);
assertEquals(4, er.getAttributes().get("otherGenesCount"));
assertEquals(3, er.getAttributes().get("proteinCodingGenesCount"));
@@ -695,7 +696,7 @@ public void testKnockoutGenesSpecificGenesAndBiotypeProteinCoding() throws Excep
params.setBiotype(VariantAnnotationConstants.PROTEIN_CODING);
ExecutionResult er = toolRunner.execute(KnockoutAnalysis.class,
- params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
checkExecutionResult(er, false);
assertEquals(0, er.getAttributes().get("otherGenesCount"));
assertEquals(3, er.getAttributes().get("proteinCodingGenesCount"));
@@ -711,7 +712,7 @@ public void testKnockoutGenesSpecificGenesAndBiotypeNMD() throws Exception {
params.setBiotype("nonsense_mediated_decay");
ExecutionResult er = toolRunner.execute(KnockoutAnalysis.class,
- params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
checkExecutionResult(er, false);
assertEquals(3, er.getAttributes().get("otherGenesCount")); // MIR1909 only has miRNA biotype
assertEquals(0, er.getAttributes().get("proteinCodingGenesCount"));
@@ -748,7 +749,7 @@ public void testKnockoutGenesByBiotype() throws Exception {
// + "," + "TR_V_gene");
ExecutionResult er = toolRunner.execute(KnockoutAnalysis.class,
- params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
checkExecutionResult(er, false);
}
@@ -760,7 +761,7 @@ public void testSampleMultiVariantFilterAnalysis() throws Exception {
params.setQuery("(biotype=protein_coding AND ct=missense_variant AND gene=BRCA2) OR (gene=BTN3A2)");
ExecutionResult er = toolRunner.execute(SampleEligibilityAnalysis.class,
- params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, token);
+ params.toObjectMap().append(ParamConstants.STUDY_PARAM, STUDY), outDir, null, false, token);
// checkExecutionResult(er, false);
}
@@ -791,7 +792,7 @@ public void testMutationalSignatureFittingSNV() throws Exception {
params.setSkip("catalogue");
toolRunner.execute(MutationalSignatureAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY),
- outDir, null, token);
+ outDir, null, false, token);
java.io.File catalogueFile = outDir.resolve(MutationalSignatureAnalysis.SIGNATURE_COEFFS_FILENAME).toFile();
byte[] bytes = Files.readAllBytes(catalogueFile.toPath());
@@ -851,7 +852,7 @@ public void testMutationalSignatureCatalogueSV() throws Exception {
params.setSkip("fitting");
toolRunner.execute(MutationalSignatureAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY),
- outDir, null, token);
+ outDir, null, false, token);
java.io.File catalogueFile = outDir.resolve(MutationalSignatureAnalysis.CATALOGUES_FILENAME_DEFAULT).toFile();
byte[] bytes = Files.readAllBytes(catalogueFile.toPath());
@@ -911,7 +912,7 @@ public void testMutationalSignatureFittingSV() throws Exception {
params.setSkip("catalogue");
toolRunner.execute(MutationalSignatureAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY),
- outDir, null, token);
+ outDir, null, false, token);
java.io.File catalogueFile = outDir.resolve(MutationalSignatureAnalysis.SIGNATURE_COEFFS_FILENAME).toFile();
byte[] bytes = Files.readAllBytes(catalogueFile.toPath());
@@ -961,7 +962,7 @@ public void testHRDetect() throws Exception {
params.setSkip("catalogue");
toolRunner.execute(MutationalSignatureAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY),
- snvFittingOutDir, null, token);
+ snvFittingOutDir, null, false, token);
java.io.File snvSignatureFittingFile = snvFittingOutDir.resolve(MutationalSignatureAnalysis.MUTATIONAL_SIGNATURE_FITTING_DATA_MODEL_FILENAME).toFile();
assertTrue(snvSignatureFittingFile.exists());
@@ -993,7 +994,7 @@ public void testHRDetect() throws Exception {
params.setSkip("catalogue");
toolRunner.execute(MutationalSignatureAnalysis.class, params, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY),
- svFittingOutDir, null, token);
+ svFittingOutDir, null, false, token);
java.io.File svSignatureFittingFile = svFittingOutDir.resolve(MutationalSignatureAnalysis.MUTATIONAL_SIGNATURE_FITTING_DATA_MODEL_FILENAME).toFile();
assertTrue(svSignatureFittingFile.exists());
@@ -1010,7 +1011,7 @@ public void testHRDetect() throws Exception {
hrdParams.setIndelQuery("{\"sample\": \"" + cancer_sample + "\", \"type\": \"" + VariantType.INDEL + "\"}");
hrdParams.setBootstrap(true);
- toolRunner.execute(HRDetectAnalysis.class, hrdParams, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY), hrdetectOutDir, null, token);
+ toolRunner.execute(HRDetectAnalysis.class, hrdParams, new ObjectMap(ParamConstants.STUDY_PARAM, CANCER_STUDY), hrdetectOutDir, null, false, token);
java.io.File hrDetectFile = hrdetectOutDir.resolve(HRDetectAnalysis.HRDETECT_SCORES_FILENAME_DEFAULT).toFile();
assertTrue("File missing : " + hrDetectFile, hrDetectFile.exists());
@@ -1091,7 +1092,7 @@ public void testClinicalAnalysisLoading() throws IOException, ToolException, Cat
params.setFile(file.getId());
toolRunner.execute(ClinicalAnalysisLoadTask.class, params, new ObjectMap(ParamConstants.STUDY_PARAM,
- CANCER_STUDY), loadingOutDir, null, token);
+ CANCER_STUDY), loadingOutDir, null, false, token);
String ca1Id = "SAP-45016-1";
String ca2Id = "OPA-6607-1";
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/VariantOperationsTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/VariantOperationsTest.java
index d92fe79abfc..8ad7f3c3479 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/VariantOperationsTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/VariantOperationsTest.java
@@ -47,16 +47,12 @@
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.individual.*;
import org.opencb.opencga.core.models.job.Job;
-import org.opencb.opencga.core.models.operations.variant.VariantAnnotationIndexParams;
-import org.opencb.opencga.core.models.operations.variant.VariantSecondaryAnnotationIndexParams;
-import org.opencb.opencga.core.models.operations.variant.VariantSecondarySampleIndexParams;
+import org.opencb.opencga.core.models.operations.variant.*;
import org.opencb.opencga.core.models.organizations.OrganizationCreateParams;
import org.opencb.opencga.core.models.organizations.OrganizationUpdateParams;
import org.opencb.opencga.core.models.project.ProjectCreateParams;
import org.opencb.opencga.core.models.project.ProjectOrganism;
import org.opencb.opencga.core.models.sample.*;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
-import org.opencb.opencga.core.models.variant.VariantStorageMetadataSynchronizeParams;
import org.opencb.opencga.core.response.OpenCGAResult;
import org.opencb.opencga.core.testclassification.duration.LongTests;
import org.opencb.opencga.core.tools.result.ExecutionResult;
@@ -235,10 +231,10 @@ private void loadDataset() throws Throwable {
.setFile(file.getId())
.setAnnotate(false)
.setLoadHomRef(YesNoAuto.YES.name()),
- Paths.get(opencga.createTmpOutdir("_index")), "index", token);
+ Paths.get(opencga.createTmpOutdir("_index")), "index", false, token);
toolRunner.execute(VariantAnnotationIndexOperationTool.class, STUDY,
new VariantAnnotationIndexParams(),
- Paths.get(opencga.createTmpOutdir("_annotation-index")), "index", token);
+ Paths.get(opencga.createTmpOutdir("_annotation-index")), "index", false, token);
for (int i = 0; i < file.getSampleIds().size(); i++) {
if (i % 2 == 0) {
@@ -320,7 +316,7 @@ public void testVariantFileReload() throws Exception {
new VariantIndexParams()
.setForceReload(false)
.setFile(file.getId()),
- Paths.get(opencga.createTmpOutdir()), "index_reload", token);
+ Paths.get(opencga.createTmpOutdir()), "index_reload", false, token);
fail("Should have thrown an exception");
} catch (ToolException e) {
assertEquals(StorageEngineException.class, e.getCause().getClass());
@@ -331,7 +327,7 @@ public void testVariantFileReload() throws Exception {
new VariantIndexParams()
.setForceReload(true)
.setFile(file.getId()),
- Paths.get(opencga.createTmpOutdir()), "index_reload", token);
+ Paths.get(opencga.createTmpOutdir()), "index_reload", false, token);
}
@@ -346,7 +342,7 @@ public void testVariantSecondaryAnnotationIndex() throws Exception {
toolRunner.execute(VariantSecondaryAnnotationIndexOperationTool.class, STUDY,
new VariantSecondaryAnnotationIndexParams(),
- Paths.get(opencga.createTmpOutdir()), "annotation_index", token);
+ Paths.get(opencga.createTmpOutdir()), "annotation_index", false, token);
for (String sample : samples) {
SampleInternalVariantSecondaryAnnotationIndex index = catalogManager.getSampleManager().get(STUDY, sample, new QueryOptions(), token).first().getInternal().getVariant().getSecondaryAnnotationIndex();
@@ -369,12 +365,25 @@ public void testVariantSecondarySampleIndex() throws Exception {
assertEquals(sample, 1, sampleIndex.getVersion().intValue());
}
+ try {
+ toolRunner.execute(VariantSecondarySampleIndexOperationTool.class, STUDY,
+ new VariantSecondarySampleIndexParams()
+ .setFamilyIndex(true)
+ .setSample(Arrays.asList(mother)),
+ Paths.get(opencga.createTmpOutdir()), "index", false, token);
+ fail("Expected to fail");
+ } catch (ToolException e) {
+ assertEquals("Exception from step 'familyIndex'", e.getMessage());
+ assertEquals("No trios found for samples [" + mother + "]", e.getCause().getMessage());
+ }
+
// Run family index. The family index status should be READY on offspring
- toolRunner.execute(VariantSecondarySampleIndexOperationTool.class, STUDY,
+ ExecutionResult result = toolRunner.execute(VariantSecondarySampleIndexOperationTool.class, STUDY,
new VariantSecondarySampleIndexParams()
.setFamilyIndex(true)
.setSample(Arrays.asList(ParamConstants.ALL)),
- Paths.get(opencga.createTmpOutdir()), "index", token);
+ Paths.get(opencga.createTmpOutdir()), "index", false, token);
+ assertEquals(0, result.getEvents().size());
for (String sample : samples) {
SampleInternalVariantSecondarySampleIndex sampleIndex = catalogManager.getSampleManager().get(STUDY, sample, new QueryOptions(), token).first().getInternal().getVariant().getSecondarySampleIndex();
@@ -392,7 +401,7 @@ public void testVariantSecondarySampleIndex() throws Exception {
// Initially nothing should change, even after running a manual synchronization
toolRunner.execute(VariantStorageMetadataSynchronizeOperationTool.class,
new VariantStorageMetadataSynchronizeParams().setStudy(STUDY_FQN),
- Paths.get(opencga.createTmpOutdir()), "", catalogManager.getUserManager().loginAsAdmin(TestParamConstants.ADMIN_PASSWORD).getToken());
+ Paths.get(opencga.createTmpOutdir()), "", false, catalogManager.getUserManager().loginAsAdmin(TestParamConstants.ADMIN_PASSWORD).getToken());
for (String sample : samples) {
SampleInternalVariantSecondarySampleIndex sampleIndex = catalogManager.getSampleManager().get(STUDY, sample, new QueryOptions(), token)
@@ -464,7 +473,7 @@ public void testVariantSecondarySampleIndexPartialFamily() throws Exception {
new VariantSecondarySampleIndexParams()
.setFamilyIndex(true)
.setSample(Arrays.asList(daughter)),
- Paths.get(opencga.createTmpOutdir()), "index", token);
+ Paths.get(opencga.createTmpOutdir()), "index", false, token);
for (String sample : samples) {
SampleInternalVariantSecondarySampleIndex sampleIndex = catalogManager.getSampleManager().get(STUDY, sample, new QueryOptions(), token).first().getInternal().getVariant().getSecondarySampleIndex();
@@ -487,7 +496,7 @@ public void testGwasIndex() throws Exception {
GwasAnalysis analysis = new GwasAnalysis();
Path outDir = Paths.get(opencga.createTmpOutdir("_gwas_index"));
System.out.println("output = " + outDir.toAbsolutePath());
- analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", token);
+ analysis.setUp(opencga.getOpencgaHome().toString(), catalogManager, variantStorageManager, executorParams, outDir, "", false, token);
List samples = catalogManager.getSampleManager().get(STUDY, file.getSampleIds().subList(0, 2), QueryOptions.empty(), token).getResults();
catalogManager.getCohortManager().create(STUDY, new Cohort().setId("CASE").setSamples(samples), new QueryOptions(), token);
@@ -523,13 +532,20 @@ public void testCellbaseConfigure() throws Exception {
assertEquals("GRCh38", cellBaseUtils.getAssembly());
String newCellbase = "https://uk.ws.zettagenomics.com/cellbase/";
- String newCellbaseVersion = "v5.8";
+ String newCellbaseVersion = "v5.2";
+ String newCellbaseDataRelease = "1";
assertNotEquals(newCellbase, cellBaseUtils.getURL());
assertNotEquals(newCellbaseVersion, cellBaseUtils.getVersion());
+ assertNotEquals(newCellbaseDataRelease, cellBaseUtils.getDataRelease());
- variantStorageManager.setCellbaseConfiguration(project, new CellBaseConfiguration(newCellbase, newCellbaseVersion, "1", ""), false, null, token);
+ variantStorageManager.setCellbaseConfiguration(project, new CellBaseConfiguration(newCellbase, newCellbaseVersion, newCellbaseDataRelease, ""), false, null, token);
CellBaseConfiguration cellbaseConfiguration = catalogManager.getProjectManager().get(project, new QueryOptions(), token).first().getCellbase();
+
+ assertEquals(newCellbase, cellbaseConfiguration.getUrl());
+ assertEquals(newCellbaseVersion, cellbaseConfiguration.getVersion());
+ assertEquals(newCellbaseDataRelease, cellbaseConfiguration.getDataRelease());
+
// assertTrue(family.getPedigreeGraph() != null);
}
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/AbstractVariantOperationManagerTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/AbstractVariantOperationManagerTest.java
index d1dcd2e9353..6063e8f1070 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/AbstractVariantOperationManagerTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/AbstractVariantOperationManagerTest.java
@@ -87,8 +87,7 @@
*/
public abstract class AbstractVariantOperationManagerTest extends GenericTest {
- private String JOB_STATUS_FILE = "status.json";
- private String OUT_LOG_EXTENSION = ".out";
+ private String OUT_LOG_EXTENSION = ".log";
private String ERR_LOG_EXTENSION = ".err";
protected CatalogManager catalogManager;
@@ -403,8 +402,7 @@ protected List copyResults(Path tmpOutdirPath, String study, String catalo
try {
logger.info("Scanning files from {} to move to {}", tmpOutdirPath, outDir.getUri());
// Avoid copy the job.status file!
- Predicate fileStatusFilter = uri -> !uri.getPath().endsWith(JOB_STATUS_FILE)
- && !ExecutionResultManager.isExecutionResultFile(uri.getPath())
+ Predicate fileStatusFilter = uri -> !ExecutionResultManager.isExecutionResultFile(uri.getPath())
&& !uri.getPath().endsWith(OUT_LOG_EXTENSION)
&& !uri.getPath().endsWith(ERR_LOG_EXTENSION);
files = fileScanner.scan(ORGANIZATION, outDir, tmpOutdirPath.toUri(), FileScanner.FileScannerPolicy.DELETE, false, true, fileStatusFilter,
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/PlatinumFileIndexerTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/PlatinumFileIndexerTest.java
index 4396a3d6e99..c343ceff241 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/PlatinumFileIndexerTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/PlatinumFileIndexerTest.java
@@ -33,8 +33,8 @@
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.job.Job;
-import org.opencb.opencga.core.models.variant.VariantFileIndexJobLauncherParams;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
+import org.opencb.opencga.core.models.operations.variant.VariantFileIndexJobLauncherParams;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.testclassification.duration.MediumTests;
import org.opencb.opencga.core.tools.result.ExecutionResult;
import org.opencb.opencga.storage.core.StorageEngineFactory;
@@ -105,11 +105,10 @@ public void testIndexFamily() throws Exception {
params.setFamily(true);
ExecutionResult er = toolRunner.execute(VariantIndexOperationTool.class, params.toObjectMap()
- .append(ParamConstants.STUDY_PARAM, studyId), outDir, null, sessionId);
+ .append(ParamConstants.STUDY_PARAM, studyId), outDir, null, false, sessionId);
- assertEquals(2, er.getSteps().size());
+ assertEquals(1, er.getSteps().size());
assertEquals("variant-index", er.getSteps().get(0).getId());
- assertEquals("family-index", er.getSteps().get(1).getId());
variantManager.iterator(new Query(VariantQueryParam.STUDY.key(), studyId), new QueryOptions(), sessionId).forEachRemaining(variant -> {
System.out.println("variant = " + variant);
@@ -213,7 +212,7 @@ public void testLauncher() throws CatalogException, IOException, ToolException {
VariantFileIndexJobLauncherParams params = new VariantFileIndexJobLauncherParams().setDirectory("data/vcfs");
List tags = Arrays.asList("tag1", "tag2");
Job job = catalogManager.getJobManager().submit(studyFqn, VariantFileIndexJobLauncherTool.ID, Enums.Priority.HIGH,
- params.toParams(STUDY_PARAM, studyFqn), null, null, null, tags, sessionId).first();
+ params.toParams(STUDY_PARAM, studyFqn), null, null, null, tags, null, null, false, sessionId).first();
ExecutionResult result = toolRunner.execute(job, Paths.get(opencga.createTmpOutdir(studyId, "_LOAD_", sessionId)), sessionId);
List tagsFromResult = result.getAttributes().getAsStringList(VariantFileIndexJobLauncherTool.JOB_TAGS_ATTRIBUTE);
@@ -232,7 +231,7 @@ public void testLauncher() throws CatalogException, IOException, ToolException {
//// Execute again, no new jobs should be submitted
tags = Arrays.asList("tag10", "tag20");
job = catalogManager.getJobManager().submit(studyFqn, VariantFileIndexJobLauncherTool.ID, Enums.Priority.HIGH,
- params.toParams(STUDY_PARAM, studyFqn), null, null, null, tags, sessionId).first();
+ params.toParams(STUDY_PARAM, studyFqn), null, null, null, tags, null, null, false, sessionId).first();
result = toolRunner.execute(job, Paths.get(opencga.createTmpOutdir(studyId, "_LOAD_", sessionId)), sessionId);
tagsFromResult = result.getAttributes().getAsStringList(VariantFileIndexJobLauncherTool.JOB_TAGS_ATTRIBUTE);
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/StatsVariantStorageTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/StatsVariantStorageTest.java
index 09bcacc2ff7..cfe9deeac5f 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/StatsVariantStorageTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/StatsVariantStorageTest.java
@@ -212,7 +212,7 @@ public void calculateStats(VariantStatsIndexParams params, QueryOptions options)
options.put(ParamConstants.STUDY_PARAM, studyId);
ToolRunner toolRunner = new ToolRunner(null, catalogManager, opencga.getStorageEngineFactory());
- toolRunner.execute(VariantStatsIndexOperationTool.class, params, options, Paths.get(tmpOutdir), null, sessionId);
+ toolRunner.execute(VariantStatsIndexOperationTool.class, params, options, Paths.get(tmpOutdir), null, false, sessionId);
}
@Test
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantFileIndexerOperationManagerTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantFileIndexerOperationManagerTest.java
index 124e03ff1b9..ef373cf1cd7 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantFileIndexerOperationManagerTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantFileIndexerOperationManagerTest.java
@@ -26,7 +26,6 @@
import org.mockito.Mockito;
import org.opencb.biodata.models.variant.metadata.Aggregation;
import org.opencb.biodata.models.variant.metadata.VariantSetStats;
-import org.opencb.commons.datastore.core.DataResult;
import org.opencb.commons.datastore.core.Event;
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
@@ -43,8 +42,8 @@
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.file.FileInternalVariantIndex;
import org.opencb.opencga.core.models.file.VariantIndexStatus;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.models.study.Study;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
import org.opencb.opencga.core.testclassification.duration.MediumTests;
import org.opencb.opencga.core.tools.result.ExecutionResult;
import org.opencb.opencga.storage.core.StorageEngineFactory;
@@ -186,7 +185,7 @@ public void testDeleteIndexedFile() throws Exception {
Study study = catalogManager.getFileManager().getStudy(ORGANIZATION, inputFile, sessionId);
thrown.expect(CatalogException.class);
- thrown.expectMessage("The status is READY");
+ thrown.expectMessage("Could not unlink file '" + inputFile.getId() + "'");
catalogManager.getFileManager().unlink(study.getFqn(), inputFile.getId(), sessionId);
}
@@ -200,7 +199,7 @@ public void testDeleteSampleFromIndexedFile() throws Exception {
Query query = new Query(SampleDBAdaptor.QueryParams.ID.key(), inputFile.getSampleIds().get(100));
thrown.expect(CatalogException.class);
thrown.expectMessage("Sample associated to the files");
- DataResult delete = catalogManager.getSampleManager().delete(studyFqn, query, null, sessionId);
+ catalogManager.getSampleManager().delete(studyFqn, query, null, sessionId);
}
@Test
@@ -444,7 +443,7 @@ public void testIndexMalformed() throws Exception {
ExecutionResult er = toolRunner.execute(VariantIndexOperationTool.class, params.toObjectMap()
.append(ParamConstants.STUDY_PARAM, studyId)
.append(VariantStorageOptions.TRANSFORM_FAIL_ON_MALFORMED_VARIANT.key(), false)
- , outDir, null, sessionId);
+ , outDir, null, false, sessionId);
assertEquals(Event.Type.WARNING, er.getEvents().get(0).getType());
assertThat(er.getEvents().get(0).getMessage(), CoreMatchers.containsString("Found malformed variants"));
@@ -462,7 +461,7 @@ public void testIndexDuplicated() throws Exception {
ExecutionResult er = toolRunner.execute(VariantIndexOperationTool.class, params.toObjectMap()
.append(ParamConstants.STUDY_PARAM, studyId)
.append(VariantStorageOptions.TRANSFORM_FAIL_ON_MALFORMED_VARIANT.key(), false)
- , outDir, null, sessionId);
+ , outDir, null, false, sessionId);
assertEquals(Event.Type.WARNING, er.getEvents().get(0).getType());
assertThat(er.getEvents().get(0).getMessage(), CoreMatchers.containsString("Found duplicated variants"));
@@ -483,7 +482,7 @@ public void testIndexWeirdFileName() throws Exception {
ExecutionResult er = toolRunner.execute(VariantIndexOperationTool.class, params.toObjectMap()
.append(ParamConstants.STUDY_PARAM, studyId)
- , outDir, null, sessionId);
+ , outDir, null, false, sessionId);
}
@Override
diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantVirtualFileIndexTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantVirtualFileIndexTest.java
index 594e86af3dd..fcc6abed280 100644
--- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantVirtualFileIndexTest.java
+++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/manager/operations/VariantVirtualFileIndexTest.java
@@ -26,7 +26,7 @@
import org.opencb.opencga.core.api.ParamConstants;
import org.opencb.opencga.core.models.file.File;
import org.opencb.opencga.core.models.file.FileLinkParams;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.testclassification.duration.MediumTests;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,15 +72,15 @@ public void testIndexVirtual() throws Exception {
toolRunner.execute(VariantIndexOperationTool.class, new VariantIndexParams()
.setFile("chr20.variant-test-file.vcf.gz")
.setLoadSplitData("REGION")
- , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, sessionId);
+ , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, false, sessionId);
toolRunner.execute(VariantIndexOperationTool.class, new VariantIndexParams()
.setFile("chr21.variant-test-file.vcf.gz")
.setLoadSplitData("REGION")
- , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, sessionId);
+ , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, false, sessionId);
toolRunner.execute(VariantIndexOperationTool.class, new VariantIndexParams()
.setFile("chr22.variant-test-file.vcf.gz")
.setLoadSplitData("REGION")
- , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, sessionId);
+ , new ObjectMap(ParamConstants.STUDY_PARAM, studyId), Paths.get(opencga.createTmpOutdir()), null, false, sessionId);
File file = catalogManager.getFileManager().get(studyId, "chr20.variant-test-file.vcf.gz", null, sessionId).first();
assertTrue(FileUtils.isPartial(file));
diff --git a/opencga-app/app/cloud/docker/opencga-init/override_yaml.py b/opencga-app/app/cloud/docker/opencga-init/override_yaml.py
index 1993f85232b..04bd8139e82 100644
--- a/opencga-app/app/cloud/docker/opencga-init/override_yaml.py
+++ b/opencga-app/app/cloud/docker/opencga-init/override_yaml.py
@@ -19,9 +19,6 @@
parser.add_argument("--catalog-database-authentication-database", required=False, default="admin")
parser.add_argument("--catalog-database-authentication-mechanism", required=False)
parser.add_argument("--catalog-database-replica-set", required=False)
-parser.add_argument("--catalog-search-hosts", required=True)
-parser.add_argument("--catalog-search-user", required=False)
-parser.add_argument("--catalog-search-password", required=False)
parser.add_argument("--rest-host", required=True)
parser.add_argument("--grpc-host", required=True)
parser.add_argument("--analysis-execution-mode", required=False)
@@ -138,13 +135,6 @@ def hostOverride(conf,hosts_var):
if args.catalog_database_authentication_mechanism is not None:
config["catalog"]["database"]["options"]["authenticationMechanism"] = args.catalog_database_authentication_mechanism
-# Inject search database
-hostOverride(config["catalog"]["searchEngine"], args.catalog_search_hosts)
-
-if args.catalog_search_user is not None:
- config["catalog"]["searchEngine"]["user"] = args.catalog_search_user
- config["catalog"]["searchEngine"]["password"] = args.catalog_search_password
-
# Inject execution settings
config["analysis"]["scratchDir"] = "/tmp/opencga_scratch"
if args.max_concurrent_jobs is not None:
diff --git a/opencga-app/app/cloud/docker/opencga-init/test/test_override_yaml.py b/opencga-app/app/cloud/docker/opencga-init/test/test_override_yaml.py
index 9d28765d399..ee6a547ea2b 100644
--- a/opencga-app/app/cloud/docker/opencga-init/test/test_override_yaml.py
+++ b/opencga-app/app/cloud/docker/opencga-init/test/test_override_yaml.py
@@ -1,11 +1,10 @@
+import os
import subprocess
-from shutil import copyfile
+import sys
import unittest
import yaml
from io import StringIO
-import sys
-import os
-
+from shutil import copyfile
os.chdir(sys.path[0])
@@ -40,9 +39,6 @@ def test_end_2_end(self):
"--catalog-database-hosts", "test-catalog-database-host1,test-catalog-database-host2,test-catalog-database-host3",
"--catalog-database-user", "test-catalog-database-user",
"--catalog-database-password", "test-catalog-database-password",
- "--catalog-search-hosts", "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user", "test-catalog-search-user",
- "--catalog-search-password", "test-catalog-search-password",
"--rest-host", "test-rest-host",
"--grpc-host", "test-grpc-host",
"--max-concurrent-jobs", "25",
@@ -170,18 +166,6 @@ def test_end_2_end(self):
self.assertEqual(config["catalog"]["database"]["options"]["sslEnabled"], True)
self.assertEqual(config["catalog"]["database"]["options"]["sslInvalidCertificatesAllowed"], True)
self.assertEqual(config["catalog"]["database"]["options"]["authenticationDatabase"], "admin")
- self.assertEqual(
- config["catalog"]["searchEngine"]["hosts"][0], "test-catalog-search-host1"
- )
- self.assertEqual(
- config["catalog"]["searchEngine"]["hosts"][1], "test-catalog-search-host2"
- )
- self.assertEqual(
- config["catalog"]["searchEngine"]["user"], "test-catalog-search-user"
- )
- self.assertEqual(
- config["catalog"]["searchEngine"]["password"], "test-catalog-search-password"
- )
self.assertEqual(config["analysis"]["execution"]["id"], "test-analysis-execution-mode")
self.assertEqual(config["analysis"]["execution"]["maxConcurrentJobs"]["variant-index"], 25)
self.assertEqual(client_config["rest"]["hosts"][0]["url"], "test-rest-host")
@@ -200,9 +184,6 @@ def test_azure_batch_execution(self):
"--catalog-database-hosts", "test-catalog-database-host1,test-catalog-database-host2,test-catalog-database-host3",
"--catalog-database-user", "test-catalog-database-user",
"--catalog-database-password", "test-catalog-database-password",
- "--catalog-search-hosts", "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user", "test-catalog-search-user",
- "--catalog-search-password", "test-catalog-search-password",
"--rest-host", "test-rest-host",
"--grpc-host", "test-grpc-host",
"--analysis-execution-mode", "AZURE",
@@ -273,9 +254,6 @@ def test_kubernetes_execution(self):
"--catalog-database-hosts", "test-catalog-database-host1,test-catalog-database-host2,test-catalog-database-host3",
"--catalog-database-user", "test-catalog-database-user",
"--catalog-database-password", "test-catalog-database-password",
- "--catalog-search-hosts", "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user", "test-catalog-search-user",
- "--catalog-search-password", "test-catalog-search-password",
"--rest-host", "test-rest-host",
"--grpc-host", "test-grpc-host",
"--analysis-execution-mode", "k8s",
@@ -357,12 +335,6 @@ def test_cellbasedb_with_empty_hosts(self):
"test-catalog-database-user",
"--catalog-database-password",
"test-catalog-database-password",
- "--catalog-search-hosts",
- "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user",
- "test-catalog-search-user",
- "--catalog-search-password",
- "test-catalog-search-password",
"--rest-host",
"test-rest-host",
"--grpc-host",
@@ -437,12 +409,6 @@ def test_cellbasedb_with_no_db_hosts(self):
"test-catalog-database-user",
"--catalog-database-password",
"test-catalog-database-password",
- "--catalog-search-hosts",
- "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user",
- "test-catalog-search-user",
- "--catalog-search-password",
- "test-catalog-search-password",
"--rest-host",
"test-rest-host",
"--grpc-host",
@@ -519,12 +485,6 @@ def test_cellbase_rest_set(self):
"test-catalog-database-user",
"--catalog-database-password",
"test-catalog-database-password",
- "--catalog-search-hosts",
- "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user",
- "test-catalog-search-user",
- "--catalog-search-password",
- "test-catalog-search-password",
"--rest-host",
"test-rest-host",
"--grpc-host",
@@ -604,12 +564,6 @@ def test_cellbase_rest_empty_set(self):
"test-catalog-database-user",
"--catalog-database-password",
"test-catalog-database-password",
- "--catalog-search-hosts",
- "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user",
- "test-catalog-search-user",
- "--catalog-search-password",
- "test-catalog-search-password",
"--rest-host",
"test-rest-host",
"--grpc-host",
@@ -688,12 +642,6 @@ def test_cellbase_rest_not_set(self):
"test-catalog-database-user",
"--catalog-database-password",
"test-catalog-database-password",
- "--catalog-search-hosts",
- "test-catalog-search-host1,test-catalog-search-host2",
- "--catalog-search-user",
- "test-catalog-search-user",
- "--catalog-search-password",
- "test-catalog-search-password",
"--rest-host",
"test-rest-host",
"--grpc-host",
diff --git a/opencga-app/app/misc/scripts/hadoop-ssh.sh b/opencga-app/app/misc/scripts/hadoop-ssh.sh
index 30141a04074..dc07d1b96f9 100755
--- a/opencga-app/app/misc/scripts/hadoop-ssh.sh
+++ b/opencga-app/app/misc/scripts/hadoop-ssh.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env sh
+#!/usr/bin/env bash
if [ -z "${HADOOP_SSH_USER}" ] ; then
@@ -25,6 +25,8 @@ if [ -n "${HADOOP_SSH_KEY}" ] && [ -f "${HADOOP_SSH_KEY}" ] ; then
SSH_OPTS="${SSH_OPTS} -i ${HADOOP_SSH_KEY}"
fi
+trap 'echo "SSH Process interrupted! Run time : ${SECONDS}s" && exit 1 1>&2 ' INT TERM
+
echo "Connect to Hadoop edge node ${HADOOP_SSH_USER}@${HADOOP_SSH_HOST}" 1>&2
echo "${SSHPASS_CMD}ssh ${SSH_OPTS} ${HADOOP_SSH_USER}@${HADOOP_SSH_HOST}" 1>&2
@@ -37,10 +39,12 @@ for arg in "$@" ; do
arg=$(echo "$arg" | sed "s/'/'\\\\\\''/g") # aaa'aaa --> 'aaa'\''aaa'
CMD="${CMD}'${arg}' "
done
-echo ${CMD}
+echo ${CMD} 1>&2
${SSHPASS_CMD} ssh ${SSH_OPTS} "${HADOOP_SSH_USER}@${HADOOP_SSH_HOST}" /bin/bash << EOF
+echo "PID=\$\$" >&2
+
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}
export HADOOP_USER_CLASSPATH_FIRST=${HADOOP_USER_CLASSPATH_FIRST}
@@ -59,3 +63,10 @@ exec ${CMD}
EOF
+EXIT_CODE=$?
+
+echo "SSH Process completed!" 1>&2
+echo " - Run time : ${SECONDS}s" 1>&2
+echo " - Exit code: ${EXIT_CODE}" 1>&2
+
+exit ${EXIT_CODE}
\ No newline at end of file
diff --git a/opencga-app/pom.xml b/opencga-app/pom.xml
index 1c77750c7f7..cac11d63828 100644
--- a/opencga-app/pom.xml
+++ b/opencga-app/pom.xml
@@ -22,7 +22,7 @@
org.opencb.opencga
opencga
- 3.2.0-SNAPSHOT
+ 3.2.1-SNAPSHOT
../pom.xml
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/AdminCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/AdminCommandExecutor.java
index 9dd3c922c14..f4106569f24 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/AdminCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/AdminCommandExecutor.java
@@ -22,7 +22,6 @@
import org.opencb.opencga.app.cli.CommandExecutor;
import org.opencb.opencga.app.cli.admin.AdminCliOptionsParser;
import org.opencb.opencga.catalog.exceptions.CatalogException;
-import org.opencb.opencga.core.config.Admin;
import java.util.Collections;
@@ -82,9 +81,6 @@ protected void setCatalogDatabaseCredentials(String host, String prefix, String
configuration.getCatalog().getDatabase().setUser(user);
}
- if (configuration.getAdmin() == null) {
- configuration.setAdmin(new Admin());
- }
if (StringUtils.isNotEmpty(password)) {
configuration.getCatalog().getDatabase().setPassword(password);
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/CatalogCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/CatalogCommandExecutor.java
index 5520de81126..090802f3741 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/CatalogCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/CatalogCommandExecutor.java
@@ -23,13 +23,11 @@
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.commons.datastore.mongodb.MongoDataStore;
import org.opencb.opencga.app.cli.admin.AdminCliOptionsParser;
-import org.opencb.opencga.catalog.auth.authentication.JwtManager;
import org.opencb.opencga.catalog.db.mongodb.MongoDBAdaptorFactory;
import org.opencb.opencga.catalog.db.mongodb.MongoDBUtils;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.catalog.managers.CatalogManager;
import org.opencb.opencga.core.common.JacksonUtils;
-import org.opencb.opencga.core.common.PasswordUtils;
import org.opencb.opencga.master.monitor.MonitorService;
import javax.ws.rs.client.Client;
@@ -173,19 +171,12 @@ private void install() throws CatalogException {
validateConfiguration(commandOptions);
- this.configuration.getAdmin().setAlgorithm("HS256");
-
- this.configuration.getAdmin().setSecretKey(commandOptions.secretKey);
- if (StringUtils.isEmpty(configuration.getAdmin().getSecretKey())) {
- configuration.getAdmin().setSecretKey(PasswordUtils.getStrongRandomPassword(JwtManager.SECRET_KEY_MIN_LENGTH));
- }
-
if (StringUtils.isEmpty(commandOptions.commonOptions.adminPassword)) {
throw new CatalogException("No admin password found. Please, insert your password.");
}
try (CatalogManager catalogManager = new CatalogManager(configuration)) {
- catalogManager.installCatalogDB("HS256", configuration.getAdmin().getSecretKey(), commandOptions.commonOptions.adminPassword,
+ catalogManager.installCatalogDB("HS256", commandOptions.secretKey, commandOptions.commonOptions.adminPassword,
commandOptions.email, commandOptions.force);
}
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/MigrationCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/MigrationCommandExecutor.java
index eb6f7ae747c..3f5f7cee80f 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/MigrationCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/MigrationCommandExecutor.java
@@ -6,7 +6,7 @@
import org.opencb.commons.datastore.core.ObjectMap;
import org.opencb.opencga.app.cli.admin.options.MigrationCommandOptions;
import org.opencb.opencga.app.cli.main.io.Table;
-import org.opencb.opencga.app.migrations.v3_0_0.OrganizationMigration;
+import org.opencb.opencga.app.migrations.v3.v3_0_0.OrganizationMigration;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.catalog.managers.CatalogManager;
import org.opencb.opencga.catalog.migration.Migration;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/migration/v2_0_0/VariantStorage200MigrationTool.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/migration/v2_0_0/VariantStorage200MigrationTool.java
index ff180f5d284..7ef509bbafc 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/migration/v2_0_0/VariantStorage200MigrationTool.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/admin/executors/migration/v2_0_0/VariantStorage200MigrationTool.java
@@ -11,7 +11,8 @@
resource = Enums.Resource.VARIANT,
type = Tool.Type.OPERATION,
scope = Tool.Scope.PROJECT,
- description = VariantStorage200MigrationTool.DESCRIPTION)
+ description = VariantStorage200MigrationTool.DESCRIPTION,
+ priority = Enums.Priority.HIGH)
public class VariantStorage200MigrationTool extends OpenCgaTool {
public static final String ID = "variant-storage-migration-2.0.0";
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/InternalCliOptionsParser.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/InternalCliOptionsParser.java
index 243a3e6918f..96522720e12 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/InternalCliOptionsParser.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/InternalCliOptionsParser.java
@@ -297,6 +297,9 @@ public static class JobOptions {
@Parameter(names = {"--job"}, description = "Job id executing the command line", arity = 1)
public String jobId;
+ @Parameter(names = {"--dry-run"}, description = "Dry run mode execution", arity = 0)
+ public boolean dryRun;
+
@Parameter(names = {"--job-id"}, hidden = true, description = "Deprecated, use --job", arity = 1)
@Deprecated
public void setJobId(String job) {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/AlignmentCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/AlignmentCommandExecutor.java
index 07ed1b36c1f..699b415da04 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/AlignmentCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/AlignmentCommandExecutor.java
@@ -18,7 +18,7 @@
import org.opencb.commons.datastore.core.ObjectMap;
import org.opencb.opencga.analysis.alignment.AlignmentCoverageAnalysis;
-import org.opencb.opencga.analysis.alignment.AlignmentStorageManager;
+import org.opencb.opencga.analysis.alignment.AlignmentIndexOperation;
import org.opencb.opencga.analysis.alignment.qc.AlignmentGeneCoverageStatsAnalysis;
import org.opencb.opencga.analysis.alignment.qc.AlignmentQcAnalysis;
import org.opencb.opencga.analysis.wrappers.bwa.BwaWrapperAnalysis;
@@ -50,6 +50,7 @@ public class AlignmentCommandExecutor extends InternalCommandExecutor {
private AlignmentCommandOptions alignmentCommandOptions;
private String jobId;
+ private boolean dryRun;
// private AlignmentStorageEngine alignmentStorageManager;
public AlignmentCommandExecutor(AlignmentCommandOptions options) {
@@ -65,6 +66,7 @@ public void execute() throws Exception {
configure();
jobId = alignmentCommandOptions.internalJobOptions.jobId;
+ dryRun = alignmentCommandOptions.internalJobOptions.dryRun;
switch (subCommandString) {
case "index-run":
@@ -119,9 +121,12 @@ public void execute() throws Exception {
private void indexRun() throws Exception {
AlignmentCommandOptions.IndexAlignmentCommandOptions cliOptions = alignmentCommandOptions.indexAlignmentCommandOptions;
- AlignmentStorageManager alignmentManager = new AlignmentStorageManager(catalogManager, storageEngineFactory, alignmentCommandOptions.internalJobOptions.jobId);
+ ObjectMap params = new AlignmentIndexParams(
+ cliOptions.fileId,
+ cliOptions.overwrite
+ ).toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- alignmentManager.index(cliOptions.study, cliOptions.file, cliOptions.outdir, cliOptions.commonOptions.token);
+ toolRunner.execute(AlignmentIndexOperation.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
@@ -162,7 +167,7 @@ private void qcRun() throws ToolException {
).toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(AlignmentQcAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(AlignmentQcAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void geneCoverageStatsRun() throws ToolException {
@@ -176,7 +181,7 @@ private void geneCoverageStatsRun() throws ToolException {
).toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(AlignmentGeneCoverageStatsAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(AlignmentGeneCoverageStatsAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// private void statsRun() throws ToolException {
@@ -239,7 +244,7 @@ private void coverageRun() throws ToolException {
cliOptions.windowSize
).toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(AlignmentCoverageAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(AlignmentCoverageAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void delete() {
@@ -264,7 +269,7 @@ private void bwa() throws Exception {
cliOptions.bwaParams)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(BwaWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(BwaWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// Samtools
@@ -279,7 +284,7 @@ private void samtools() throws Exception {
cliOptions.samtoolsParams)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(SamtoolsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(SamtoolsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// Deeptools
@@ -293,7 +298,7 @@ private void deeptools() throws Exception {
cliOptions.deeptoolsParams)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(DeeptoolsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(DeeptoolsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// FastQC
@@ -307,7 +312,7 @@ private void fastqc() throws Exception {
cliOptions.fastqcParams)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(FastqcWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(FastqcWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// Picard
@@ -321,7 +326,7 @@ private void picard() throws Exception {
cliOptions.picardParams)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(PicardWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(PicardWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
//-------------------------------------------------------------------------
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ClinicalCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ClinicalCommandExecutor.java
index 0a32ddece0a..ac18f769392 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ClinicalCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ClinicalCommandExecutor.java
@@ -17,7 +17,6 @@
package org.opencb.opencga.app.cli.internal.executors;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -39,33 +38,14 @@
import org.opencb.opencga.analysis.clinical.zetta.ZettaInterpretationConfiguration;
import org.opencb.opencga.analysis.variant.manager.VariantCatalogQueryUtils;
import org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions;
-import org.opencb.opencga.catalog.exceptions.CatalogException;
-import org.opencb.opencga.catalog.managers.ClinicalAnalysisManager;
-import org.opencb.opencga.catalog.managers.SampleManager;
-import org.opencb.opencga.catalog.utils.ParamUtils;
import org.opencb.opencga.core.api.ParamConstants;
-import org.opencb.opencga.core.common.JacksonUtils;
import org.opencb.opencga.core.exceptions.ToolException;
import org.opencb.opencga.core.models.clinical.*;
-import org.opencb.opencga.core.models.family.FamilyCreateParams;
-import org.opencb.opencga.core.models.individual.Individual;
-import org.opencb.opencga.core.models.individual.IndividualUpdateParams;
-import org.opencb.opencga.core.models.panel.Panel;
-import org.opencb.opencga.core.models.panel.PanelCreateParams;
-import org.opencb.opencga.core.models.sample.Sample;
-import org.opencb.opencga.core.models.sample.SampleCreateParams;
-import org.opencb.opencga.core.models.sample.SampleReferenceParam;
-import org.opencb.opencga.core.response.RestResponse;
-
-import java.io.File;
+
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
import static org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions.CancerTieringCommandOptions.CANCER_TIERING_INTERPRETATION_RUN_COMMAND;
import static org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions.ExomiserInterpretationCommandOptions.EXOMISER_INTERPRETATION_RUN_COMMAND;
@@ -74,8 +54,6 @@
import static org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions.TeamCommandOptions.TEAM_INTERPRETATION_RUN_COMMAND;
import static org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions.TieringCommandOptions.TIERING_INTERPRETATION_RUN_COMMAND;
import static org.opencb.opencga.app.cli.internal.options.ClinicalCommandOptions.ZettaCommandOptions.ZETTA_INTERPRETATION_RUN_COMMAND;
-import static org.opencb.opencga.catalog.utils.ParamUtils.SaveInterpretationAs.PRIMARY;
-import static org.opencb.opencga.catalog.utils.ParamUtils.SaveInterpretationAs.SECONDARY;
/**
* Created on 01/04/20
@@ -137,7 +115,7 @@ private void rgaIndex() throws ToolException {
ObjectMap params = new RgaAnalysisParams(options.file)
.toObjectMap(options.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, options.study);
- toolRunner.execute(RgaAnalysis.class, params, outDir, options.jobOptions.jobId, options.commonOptions.token);
+ toolRunner.execute(RgaAnalysis.class, params, outDir, options.jobOptions.jobId, options.jobOptions.dryRun, options.commonOptions.token);
}
private void auxRgaIndex() throws ToolException {
@@ -147,7 +125,7 @@ private void auxRgaIndex() throws ToolException {
ObjectMap params = new ObjectMap()
.appendAll(options.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, options.study);
- toolRunner.execute(AuxiliarRgaAnalysis.class, params, outDir, options.jobOptions.jobId, options.commonOptions.token);
+ toolRunner.execute(AuxiliarRgaAnalysis.class, params, outDir, options.jobOptions.jobId, options.jobOptions.dryRun, options.commonOptions.token);
}
private void tiering() throws Exception {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/DiseasePanelInternalCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/DiseasePanelInternalCommandExecutor.java
index 2529baaee1e..aa39f3d0919 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/DiseasePanelInternalCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/DiseasePanelInternalCommandExecutor.java
@@ -45,7 +45,8 @@ private void importPanels() throws ToolException {
.toObjectMap(options.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, options.studyId);
- toolRunner.execute(PanelImportTask.class, params, Paths.get(options.outDir), jobId, token);
+ toolRunner.execute(PanelImportTask.class, params, Paths.get(options.outDir), jobId,
+ diseasePanelCommandOptions.internalJobOptions.dryRun, token);
}
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/FileCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/FileCommandExecutor.java
index e79fbae1a4a..04bafdfaada 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/FileCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/FileCommandExecutor.java
@@ -90,7 +90,8 @@ private void postlink() throws ToolException {
.toObjectMap(options.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, options.studyId);
- toolRunner.execute(PostLinkSampleAssociation.class, params, outDir, fileCommandOptions.internalJobOptions.jobId, token);
+ toolRunner.execute(PostLinkSampleAssociation.class, params, outDir, fileCommandOptions.internalJobOptions.jobId,
+ fileCommandOptions.internalJobOptions.dryRun, token);
}
private void fetch() throws ToolException {
@@ -98,7 +99,7 @@ private void fetch() throws ToolException {
Path outDir = Paths.get(options.outDir);
- toolRunner.execute(FetchAndRegisterTask.class, new FileFetch(options.url, options.path), outDir, null, options.commonOptions.token);
+ toolRunner.execute(FetchAndRegisterTask.class, new FileFetch(options.url, options.path), outDir, null, false, options.commonOptions.token);
}
private void tsvLoad() throws ToolException {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/StudyCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/StudyCommandExecutor.java
index 0da33d83bfe..aa4eb7471d8 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/StudyCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/StudyCommandExecutor.java
@@ -45,6 +45,6 @@ private void templateRun() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.studyId);
- toolRunner.execute(TemplateRunner.class, params, Paths.get(cliOptions.outdir), cliOptions.jobOptions.jobId, token);
+ toolRunner.execute(TemplateRunner.class, params, Paths.get(cliOptions.outdir), cliOptions.jobOptions.jobId, cliOptions.jobOptions.dryRun, token);
}
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ToolsCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ToolsCommandExecutor.java
index b075f5de782..ebcf46144db 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ToolsCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/ToolsCommandExecutor.java
@@ -53,7 +53,7 @@ public void execute() throws Exception {
private void executeTool() throws ToolException {
ToolsCommandOptions.ExecuteToolCommandOptions cliOptions = this.toolCommandOptions.executeToolCommandOptions;
toolRunner.execute(cliOptions.toolId, new ObjectMap(cliOptions.params), Paths.get(cliOptions.outDir),
- toolCommandOptions.internalJobOptions.jobId, token);
+ toolCommandOptions.internalJobOptions.jobId, toolCommandOptions.internalJobOptions.dryRun, token);
}
private void executeJob() throws CatalogException, ToolException {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/VariantInternalCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/VariantInternalCommandExecutor.java
index e502850d9ee..11d18532218 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/VariantInternalCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/executors/VariantInternalCommandExecutor.java
@@ -62,6 +62,7 @@
import org.opencb.opencga.core.common.YesNoAuto;
import org.opencb.opencga.core.exceptions.AnalysisExecutionException;
import org.opencb.opencga.core.exceptions.ToolException;
+import org.opencb.opencga.core.models.clinical.ClinicalAnalysis;
import org.opencb.opencga.core.models.clinical.ExomiserWrapperParams;
import org.opencb.opencga.core.models.common.mixins.GenericRecordAvroJsonMixin;
import org.opencb.opencga.core.models.operations.variant.*;
@@ -128,6 +129,7 @@ public class VariantInternalCommandExecutor extends InternalCommandExecutor {
// private AnalysisCliOptionsParser.VariantCommandOptions variantCommandOptions;
private VariantCommandOptions variantCommandOptions;
private String jobId;
+ private boolean dryRun;
public VariantInternalCommandExecutor(VariantCommandOptions variantCommandOptions) {
super(variantCommandOptions.commonCommandOptions);
@@ -143,6 +145,7 @@ public void execute() throws Exception {
configure();
jobId = variantCommandOptions.internalJobOptions.jobId;
+ dryRun = variantCommandOptions.internalJobOptions.dryRun;
switch (subCommandString) {
case VARIANT_DELETE_COMMAND:
@@ -343,7 +346,7 @@ private void query(VariantCommandOptions.AbstractVariantQueryCommandOptions cliO
cliOptions.outputFileName,
cliOptions.outputFileFormat,
cliOptions.variantsFile);
- toolRunner.execute(VariantExportTool.class, toolParams, queryOptions, Paths.get(outdir), jobId, token);
+ toolRunner.execute(VariantExportTool.class, toolParams, queryOptions, Paths.get(outdir), jobId, dryRun, token);
}
}
@@ -362,7 +365,7 @@ private void fileDelete() throws ToolException {
cliOptions.genericVariantDeleteOptions.resume);
toolRunner.execute(VariantFileDeleteOperationTool.class,
params.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study),
- Paths.get(cliOptions.outdir), jobId, token);
+ Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void index() throws ToolException {
@@ -404,7 +407,7 @@ private void index() throws ToolException {
.append(VariantStorageOptions.STDIN.key(), cliOptions.stdin)
.append(VariantStorageOptions.STDOUT.key(), cliOptions.stdout);
- toolRunner.execute(VariantIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void secondaryIndex() throws ToolException {
@@ -419,9 +422,9 @@ private void secondaryIndex() throws ToolException {
.append(ParamConstants.PROJECT_PARAM, cliOptions.project);
if (CollectionUtils.isEmpty(cliOptions.sample)) {
- toolRunner.execute(VariantSecondaryAnnotationIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantSecondaryAnnotationIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
} else {
- toolRunner.execute(VariantSecondaryIndexSamplesOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantSecondaryIndexSamplesOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
}
@@ -454,7 +457,7 @@ private void statsRun() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(VariantStatsAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantStatsAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// private void statsIndex() throws ToolException {
@@ -485,7 +488,7 @@ private void scoreLoad() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(VariantScoreIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantScoreIndexOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void scoreRemove() throws ToolException {
@@ -498,7 +501,7 @@ private void scoreRemove() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(VariantScoreDeleteOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantScoreDeleteOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void sampleIndex()
@@ -516,7 +519,7 @@ private void sampleIndex()
toolRunner.execute(VariantSecondarySampleIndexOperationTool.class,
params.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study),
Paths.get(cliOptions.outdir),
- jobId, token);
+ jobId, dryRun, token);
}
private void familyIndex()
@@ -532,7 +535,7 @@ private void familyIndex()
toolRunner.execute(VariantFamilyIndexOperationTool.class,
params.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study),
Paths.get(cliOptions.outdir),
- jobId, token);
+ jobId, dryRun, token);
}
private void annotate() throws ToolException {
@@ -557,7 +560,7 @@ private void annotate() throws ToolException {
.append(ParamConstants.PROJECT_PARAM, cliOptions.project)
.append(ParamConstants.STUDY_PARAM, cliOptions.study),
Paths.get(cliOptions.outdir),
- jobId, token);
+ jobId, dryRun, token);
}
private void annotationSave() throws ToolException {
@@ -567,7 +570,7 @@ private void annotationSave() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.PROJECT_PARAM, cliOptions.project);
- toolRunner.execute(VariantAnnotationSaveOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantAnnotationSaveOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void annotationDelete() throws ToolException {
@@ -577,7 +580,7 @@ private void annotationDelete() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.PROJECT_PARAM, cliOptions.project);
- toolRunner.execute(VariantAnnotationDeleteOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantAnnotationDeleteOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void annotationQuery() throws CatalogException, IOException, StorageEngineException {
@@ -645,7 +648,7 @@ private void aggregateFamily() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(VariantAggregateFamilyOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantAggregateFamilyOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void aggregate() throws ToolException {
@@ -657,7 +660,7 @@ private void aggregate() throws ToolException {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(VariantAggregateOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(VariantAggregateOperationTool.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void sampleRun() throws Exception {
@@ -667,7 +670,7 @@ private void sampleRun() throws Exception {
toolRunner.execute(SampleVariantFilterAnalysis.class,
cliOptions.toolParams.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study),
- Paths.get(cliOptions.outdir), jobId, token);
+ Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void gwas() throws Exception {
@@ -689,7 +692,7 @@ private void gwas() throws Exception {
}
GwasAnalysis gwasAnalysis = new GwasAnalysis();
gwasAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
gwasAnalysis.setStudy(cliOptions.study)
.setPhenotype(cliOptions.phenotype)
.setIndex(cliOptions.index)
@@ -723,7 +726,7 @@ private void knockout() throws Exception {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(KnockoutAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(KnockoutAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void sampleEligibility() throws Exception {
@@ -736,7 +739,7 @@ private void sampleEligibility() throws Exception {
.toObjectMap(cliOptions.commonOptions.params)
.append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(SampleEligibilityAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(SampleEligibilityAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void sampleStats() throws Exception {
@@ -755,7 +758,7 @@ private void sampleStats() throws Exception {
cliOptions.batchSize,
variantQuery
);
- toolRunner.execute(SampleVariantStatsAnalysis.class, toolParams, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(SampleVariantStatsAnalysis.class, toolParams, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void cohortStats() throws Exception {
@@ -774,7 +777,7 @@ private void cohortStats() throws Exception {
CohortVariantStatsAnalysis cohortVariantStatsAnalysis = new CohortVariantStatsAnalysis();
cohortVariantStatsAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
cohortVariantStatsAnalysis.setStudy(cliOptions.study)
.setCohortName(cliOptions.cohort)
.setIndex(cliOptions.index)
@@ -795,7 +798,7 @@ private void julie() throws Exception {
Path outdir = Paths.get(cliOptions.outdir);
- toolRunner.execute(JulieTool.class, toolParams, params, outdir, jobId, token);
+ toolRunner.execute(JulieTool.class, toolParams, params, outdir, jobId, dryRun, token);
}
private void mutationalSignature() throws Exception {
@@ -823,7 +826,7 @@ private void mutationalSignature() throws Exception {
cliOptions.outdir)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(MutationalSignatureAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(MutationalSignatureAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void hrDetect() throws Exception {
@@ -845,7 +848,7 @@ private void hrDetect() throws Exception {
cliOptions.outdir)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(HRDetectAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(HRDetectAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void genomePlot() throws Exception {
@@ -859,7 +862,7 @@ private void genomePlot() throws Exception {
cliOptions.outdir)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(GenomePlotAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(GenomePlotAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void mendelianError() throws Exception {
@@ -869,7 +872,7 @@ private void mendelianError() throws Exception {
MendelianErrorAnalysis mendelianErrorAnalysis = new MendelianErrorAnalysis();
mendelianErrorAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
mendelianErrorAnalysis.setStudy(cliOptions.study)
.setFamilyId(cliOptions.family)
.setIndividualId(cliOptions.individual)
@@ -884,7 +887,7 @@ private void inferredSex() throws Exception {
InferredSexAnalysis inferredSexAnalysis = new InferredSexAnalysis();
inferredSexAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
inferredSexAnalysis.setStudyId(cliOptions.study)
.setIndividualId(cliOptions.individual)
.setSampleId(cliOptions.sample)
@@ -898,7 +901,7 @@ private void relatedness() throws Exception {
RelatednessAnalysis relatednessAnalysis = new RelatednessAnalysis();
relatednessAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
relatednessAnalysis.setStudyId(cliOptions.study)
.setIndividualIds(cliOptions.individuals)
.setSampleIds(cliOptions.samples)
@@ -914,7 +917,7 @@ private void familyQc() throws Exception {
FamilyQcAnalysis familyQcAnalysis = new FamilyQcAnalysis();
familyQcAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
familyQcAnalysis.setStudyId(cliOptions.study)
.setFamilyId(cliOptions.family)
.setRelatednessMethod(cliOptions.relatednessMethod)
@@ -929,7 +932,7 @@ private void individualQc() throws Exception {
IndividualQcAnalysis individualQcAnalysis = new IndividualQcAnalysis();
individualQcAnalysis.setUp(appHome, catalogManager, storageEngineFactory, params, Paths.get(cliOptions.outdir),
- variantCommandOptions.internalJobOptions.jobId, token);
+ variantCommandOptions.internalJobOptions.jobId, dryRun, token);
individualQcAnalysis.setStudyId(cliOptions.study)
.setIndividualId(cliOptions.individual)
.setSampleId(cliOptions.sample)
@@ -972,7 +975,7 @@ private void sampleQc() throws Exception {
cliOptions.outdir)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(SampleQcAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(SampleQcAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
// Wrappers
@@ -985,7 +988,7 @@ private void plink() throws Exception {
cliOptions.plinkParams)
.toObjectMap(cliOptions.basicOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(PlinkWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(PlinkWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void rvtests() throws Exception {
@@ -997,7 +1000,7 @@ private void rvtests() throws Exception {
cliOptions.rvtestsParams)
.toObjectMap(cliOptions.basicOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(RvtestsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(RvtestsWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void gatk() throws Exception {
@@ -1009,7 +1012,7 @@ private void gatk() throws Exception {
cliOptions.gatkParams)
.toObjectMap(cliOptions.basicOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(GatkWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(GatkWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void exomiser() throws Exception {
@@ -1017,10 +1020,11 @@ private void exomiser() throws Exception {
ObjectMap params = new ExomiserWrapperParams(
cliOptions.sample,
+ cliOptions.clinicalAnalysisType,
cliOptions.outdir)
.toObjectMap(cliOptions.commonOptions.params).append(ParamConstants.STUDY_PARAM, cliOptions.study);
- toolRunner.execute(ExomiserWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, token);
+ toolRunner.execute(ExomiserWrapperAnalysis.class, params, Paths.get(cliOptions.outdir), jobId, dryRun, token);
}
private void checkSignatureVersion(String sigVersion) throws ClientException {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/AlignmentCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/AlignmentCommandOptions.java
index 99f09597f4b..c9d92e51d4f 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/AlignmentCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/AlignmentCommandOptions.java
@@ -104,8 +104,11 @@ public class IndexAlignmentCommandOptions extends GeneralCliOptions.StudyOption
@ParametersDelegate
public Object internalJobOptions = internalJobOptionsObject;
- @Parameter(names = {"--file"}, description = FILE_ID_DESCRIPTION, required = true, arity = 1)
- public String file;
+ @Parameter(names = {"--file-id"}, description = FILE_ID_DESCRIPTION, required = true, arity = 1)
+ public String fileId;
+
+ @Parameter(names = {"--overwrite"}, description = "Force to overwrite the alignment index file", arity = 0)
+ public boolean overwrite;
@Parameter(names = {"-o", "--outdir"}, description = OUTPUT_DIRECTORY_DESCRIPTION)
public String outdir;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/VariantCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/VariantCommandOptions.java
index bad1beff087..aa25fe630e1 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/VariantCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/internal/options/VariantCommandOptions.java
@@ -48,6 +48,7 @@
import org.opencb.opencga.app.cli.internal.InternalCliOptionsParser;
import org.opencb.opencga.core.api.FieldConstants;
import org.opencb.opencga.core.api.ParamConstants;
+import org.opencb.opencga.core.models.clinical.ClinicalAnalysis;
import org.opencb.opencga.core.models.variant.AnnotationVariantQueryParams;
import org.opencb.opencga.core.models.variant.SampleVariantFilterParams;
import org.opencb.opencga.core.tools.variant.IndividualQcAnalysisExecutor;
@@ -1841,10 +1842,13 @@ public class ExomiserAnalysisCommandOptions {
@Parameter(names = {"--study"}, description = "Study where all the samples belong to.")
public String study;
- @Parameter(names = {"--sample"}, description = "Sample ID.", required = true)
+ @Parameter(names = {"--sample"}, description = FieldConstants.SAMPLE_ID_DESCRIPTION, required = true)
public String sample;
- @Parameter(names = {"-o", "--outdir"}, description = "Output directory.")
+ @Parameter(names = {"--clinical-analysis-type"}, description = FieldConstants.EXOMISER_CLINICAL_ANALYSIS_TYPE_DESCRIPTION)
+ public String clinicalAnalysisType = ClinicalAnalysis.Type.SINGLE.name();
+
+ @Parameter(names = {"-o", "--outdir"}, description = FieldConstants.JOB_OUT_DIR_DESCRIPTION)
public String outdir;
}
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java
index d6bd902fff1..4d1ed716a48 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java
@@ -49,7 +49,7 @@ public abstract class OpenCgaCompleter implements Completer {
.map(Candidate::new)
.collect(toList());
- private List jobsList = asList( "acl-update","create","distinct","retry","search","top","acl","delete","info","update","log-head","log-tail")
+ private List jobsList = asList( "acl-update","create","distinct","retry","search","top","acl","delete","info","update","kill","log-head","log-tail")
.stream()
.map(Candidate::new)
.collect(toList());
@@ -89,7 +89,7 @@ public abstract class OpenCgaCompleter implements Completer {
.map(Candidate::new)
.collect(toList());
- private List organizationsList = asList( "create","notes-create","notes-search","notes-delete","notes-update","info","update")
+ private List organizationsList = asList( "create","notes-create","notes-search","notes-delete","notes-update","update-status-user","user-update","configuration-update","info","update")
.stream()
.map(Candidate::new)
.collect(toList());
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java
index 33d53de3bf8..d99dbba3488 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java
@@ -160,6 +160,7 @@ public OpencgaCliOptionsParser() {
jobsSubCommands.addCommand("delete", jobsCommandOptions.deleteCommandOptions);
jobsSubCommands.addCommand("info", jobsCommandOptions.infoCommandOptions);
jobsSubCommands.addCommand("update", jobsCommandOptions.updateCommandOptions);
+ jobsSubCommands.addCommand("kill", jobsCommandOptions.killCommandOptions);
jobsSubCommands.addCommand("log-head", jobsCommandOptions.headLogCommandOptions);
jobsSubCommands.addCommand("log-tail", jobsCommandOptions.tailLogCommandOptions);
jobsSubCommands.addCommand("log", jobsCommandOptions.logCommandOptions);
@@ -272,6 +273,9 @@ public OpencgaCliOptionsParser() {
organizationsSubCommands.addCommand("notes-search", organizationsCommandOptions.searchNotesCommandOptions);
organizationsSubCommands.addCommand("notes-delete", organizationsCommandOptions.deleteNotesCommandOptions);
organizationsSubCommands.addCommand("notes-update", organizationsCommandOptions.updateNotesCommandOptions);
+ organizationsSubCommands.addCommand("update-status-user", organizationsCommandOptions.userUpdateStatusCommandOptions);
+ organizationsSubCommands.addCommand("user-update", organizationsCommandOptions.updateUserCommandOptions);
+ organizationsSubCommands.addCommand("configuration-update", organizationsCommandOptions.updateConfigurationCommandOptions);
organizationsSubCommands.addCommand("info", organizationsCommandOptions.infoCommandOptions);
organizationsSubCommands.addCommand("update", organizationsCommandOptions.updateCommandOptions);
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/custom/CustomStudiesCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/custom/CustomStudiesCommandOptions.java
index 0a317ace8a8..74ff7b9ce30 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/custom/CustomStudiesCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/custom/CustomStudiesCommandOptions.java
@@ -54,16 +54,25 @@ public class RunTemplatesCommandOptions {
@Parameter(names = {"--resume"}, description = "Resume study metadata ingestion.", arity = 0)
public boolean resume;
- @Parameter(names = {"--jobId"}, description = "Job id.", arity = 1)
+ @Parameter(names = {"--job-id", "--jobId"}, description = "Job id.", arity = 1)
public String jobId;
- @Parameter(names = {"--jobDependsOn"}, description = "Job depends on.", arity = 1)
+ @Parameter(names = {"--job-depends-on", "--jobDependsOn"}, description = "Job depends on.", arity = 1)
public String jobDependsOn;
- @Parameter(names = {"--jobDescription"}, description = "Job description.", arity = 1)
+ @Parameter(names = {"--job-description", "--jobDescription"}, description = "Job description.", arity = 1)
public String jobDescription;
- @Parameter(names = {"--jobTags"}, description = "Job tags.", arity = 1)
+ @Parameter(names = {"--job-tags", "--jobTags"}, description = "Job tags.", arity = 1)
public String jobTags;
+
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Job scheduled start time.", arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Job priority.", arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Job dry-run mode.", arity = 1)
+ public Boolean jobDryRun;
}
}
\ No newline at end of file
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisAlignmentCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisAlignmentCommandExecutor.java
index 217b7421f32..ddc77f0009b 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisAlignmentCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisAlignmentCommandExecutor.java
@@ -121,6 +121,9 @@ private RestResponse runBwa() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -162,6 +165,9 @@ private RestResponse runCoverageIndex() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -200,6 +206,9 @@ private RestResponse coverageQcGeneCoverageStatsRun() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -295,6 +304,9 @@ private RestResponse runDeeptools() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -333,6 +345,9 @@ private RestResponse runFastqc() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -371,6 +386,9 @@ private RestResponse runIndex() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -387,7 +405,7 @@ private RestResponse runIndex() throws Exception {
.readValue(new java.io.File(commandOptions.jsonFile), AlignmentIndexParams.class);
} else {
ObjectMap beanParams = new ObjectMap();
- putNestedIfNotEmpty(beanParams, "file",commandOptions.file, true);
+ putNestedIfNotEmpty(beanParams, "fileId",commandOptions.fileId, true);
putNestedIfNotNull(beanParams, "overwrite",commandOptions.overwrite, true);
alignmentIndexParams = JacksonUtils.getDefaultObjectMapper().copy()
@@ -408,6 +426,9 @@ private RestResponse runPicard() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -446,6 +467,9 @@ private RestResponse runQc() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -517,6 +541,9 @@ private RestResponse runSamtools() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisClinicalCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisClinicalCommandExecutor.java
index e96ddce01c2..84eeffe1be6 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisClinicalCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisClinicalCommandExecutor.java
@@ -518,6 +518,9 @@ private RestResponse runInterpreterCancerTiering() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -556,6 +559,9 @@ private RestResponse runInterpreterExomiser() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -592,6 +598,9 @@ private RestResponse runInterpreterTeam() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -631,6 +640,9 @@ private RestResponse runInterpreterTiering() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -670,6 +682,9 @@ private RestResponse runInterpreterZetta() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -756,6 +771,9 @@ private RestResponse load() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -907,6 +925,9 @@ private RestResponse runRgaIndex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotNull("auxiliarIndex", commandOptions.auxiliarIndex);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisVariantCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisVariantCommandExecutor.java
index 33dfbc54a41..3427a69163c 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisVariantCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AnalysisVariantCommandExecutor.java
@@ -28,6 +28,7 @@
import org.opencb.opencga.core.models.analysis.knockout.KnockoutByIndividual;
import org.opencb.opencga.core.models.clinical.ExomiserWrapperParams;
import org.opencb.opencga.core.models.job.Job;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantStatsExportParams;
import org.opencb.opencga.core.models.variant.AnnotationVariantQueryParams;
import org.opencb.opencga.core.models.variant.CircosAnalysisParams;
@@ -50,7 +51,6 @@
import org.opencb.opencga.core.models.variant.SampleVariantFilterParams;
import org.opencb.opencga.core.models.variant.SampleVariantStatsAnalysisParams;
import org.opencb.opencga.core.models.variant.VariantExportParams;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
import org.opencb.opencga.core.models.variant.VariantStatsAnalysisParams;
import org.opencb.opencga.core.response.QueryType;
import org.opencb.opencga.core.response.RestResponse;
@@ -370,6 +370,9 @@ private RestResponse runCohortStats() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -410,6 +413,9 @@ private RestResponse runExomiser() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -427,6 +433,7 @@ private RestResponse runExomiser() throws Exception {
} else {
ObjectMap beanParams = new ObjectMap();
putNestedIfNotEmpty(beanParams, "sample",commandOptions.sample, true);
+ putNestedIfNotEmpty(beanParams, "clinicalAnalysisType",commandOptions.clinicalAnalysisType, true);
putNestedIfNotEmpty(beanParams, "outdir",commandOptions.outdir, true);
exomiserWrapperParams = JacksonUtils.getDefaultObjectMapper().copy()
@@ -450,6 +457,9 @@ private RestResponse runExport() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -590,6 +600,9 @@ private RestResponse runFamilyQc() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -628,6 +641,9 @@ private RestResponse deleteFile() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
queryParams.putIfNotEmpty("file", commandOptions.file);
queryParams.putIfNotNull("resume", commandOptions.resume);
@@ -649,6 +665,9 @@ private RestResponse runGatk() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -687,6 +706,9 @@ private RestResponse runGenomePlot() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -727,6 +749,9 @@ private RestResponse runGwas() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -774,6 +799,9 @@ private RestResponse runHrDetect() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -822,6 +850,9 @@ private RestResponse runIndex() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -887,6 +918,9 @@ private RestResponse runIndividualQc() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -926,6 +960,9 @@ private RestResponse runInferredSex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -998,6 +1035,9 @@ private RestResponse runKnockout() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1043,6 +1083,9 @@ private RestResponse runMendelianError() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1135,6 +1178,9 @@ private RestResponse runMutationalSignature() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1186,6 +1232,9 @@ private RestResponse runPlink() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1313,6 +1362,9 @@ private RestResponse runRelatedness() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1353,6 +1405,9 @@ private RestResponse runRvtests() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1426,6 +1481,9 @@ private RestResponse runSampleEligibility() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1464,6 +1522,9 @@ private RestResponse runSampleQc() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1564,6 +1625,9 @@ private RestResponse runSample() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1657,6 +1721,9 @@ private RestResponse runSampleStats() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1729,6 +1796,9 @@ private RestResponse runStatsExport() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1769,6 +1839,9 @@ private RestResponse runStats() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/DiseasePanelsCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/DiseasePanelsCommandExecutor.java
index 033aff423b5..00dbbbc130f 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/DiseasePanelsCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/DiseasePanelsCommandExecutor.java
@@ -215,6 +215,9 @@ private RestResponse importPanels() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/FilesCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/FilesCommandExecutor.java
index b6644a30d88..f9f6f5fedb8 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/FilesCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/FilesCommandExecutor.java
@@ -351,6 +351,9 @@ private RestResponse fetch() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -438,6 +441,9 @@ private RestResponse runLink() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -479,6 +485,9 @@ private RestResponse runPostlink() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/JobsCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/JobsCommandExecutor.java
index 8f6e674164a..cf28e7983bf 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/JobsCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/JobsCommandExecutor.java
@@ -97,6 +97,9 @@ public void execute() throws Exception {
case "update":
queryResponse = update();
break;
+ case "kill":
+ queryResponse = kill();
+ break;
case "log-head":
queryResponse = headLog();
break;
@@ -236,6 +239,7 @@ private RestResponse retry() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -400,6 +404,20 @@ private RestResponse update() throws Exception {
return openCGAClient.getJobClient().update(commandOptions.jobs, jobUpdateParams, queryParams);
}
+ private RestResponse kill() throws Exception {
+ logger.debug("Executing kill in Jobs command line");
+
+ JobsCommandOptions.KillCommandOptions commandOptions = jobsCommandOptions.killCommandOptions;
+
+ ObjectMap queryParams = new ObjectMap();
+ queryParams.putIfNotEmpty("study", commandOptions.study);
+ if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
+ queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
+ }
+
+ return openCGAClient.getJobClient().kill(commandOptions.job, queryParams);
+ }
+
private RestResponse headLog() throws Exception {
logger.debug("Executing headLog in Jobs command line");
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java
index 068b4a3792a..6135886595d 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java
@@ -22,21 +22,21 @@
import org.opencb.opencga.core.models.operations.variant.VariantAggregateParams;
import org.opencb.opencga.core.models.operations.variant.VariantAnnotationIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantAnnotationSaveParams;
+import org.opencb.opencga.core.models.operations.variant.VariantConfigureParams;
import org.opencb.opencga.core.models.operations.variant.VariantFamilyIndexParams;
+import org.opencb.opencga.core.models.operations.variant.VariantFileDeleteParams;
+import org.opencb.opencga.core.models.operations.variant.VariantFileIndexJobLauncherParams;
+import org.opencb.opencga.core.models.operations.variant.VariantIndexParams;
+import org.opencb.opencga.core.models.operations.variant.VariantPruneParams;
+import org.opencb.opencga.core.models.operations.variant.VariantSampleDeleteParams;
import org.opencb.opencga.core.models.operations.variant.VariantScoreIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantSecondaryAnnotationIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantSecondarySampleIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantStatsDeleteParams;
import org.opencb.opencga.core.models.operations.variant.VariantStatsIndexParams;
import org.opencb.opencga.core.models.operations.variant.VariantStorageMetadataRepairToolParams;
-import org.opencb.opencga.core.models.variant.VariantConfigureParams;
-import org.opencb.opencga.core.models.variant.VariantFileDeleteParams;
-import org.opencb.opencga.core.models.variant.VariantFileIndexJobLauncherParams;
-import org.opencb.opencga.core.models.variant.VariantIndexParams;
-import org.opencb.opencga.core.models.variant.VariantPruneParams;
-import org.opencb.opencga.core.models.variant.VariantSampleDeleteParams;
-import org.opencb.opencga.core.models.variant.VariantStorageMetadataSynchronizeParams;
-import org.opencb.opencga.core.models.variant.VariantStudyDeleteParams;
+import org.opencb.opencga.core.models.operations.variant.VariantStorageMetadataSynchronizeParams;
+import org.opencb.opencga.core.models.operations.variant.VariantStudyDeleteParams;
import org.opencb.opencga.core.response.QueryType;
import org.opencb.opencga.core.response.RestResponse;
@@ -211,6 +211,9 @@ private RestResponse aggregateVariant() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -248,6 +251,9 @@ private RestResponse deleteVariantAnnotation() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
queryParams.putIfNotEmpty("annotationId", commandOptions.annotationId);
@@ -264,6 +270,9 @@ private RestResponse indexVariantAnnotation() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
@@ -309,6 +318,9 @@ private RestResponse saveVariantAnnotation() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
@@ -375,6 +387,9 @@ private RestResponse deleteVariant() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -394,6 +409,7 @@ private RestResponse deleteVariant() throws Exception {
ObjectMap beanParams = new ObjectMap();
putNestedIfNotNull(beanParams, "file",commandOptions.file, true);
putNestedIfNotNull(beanParams, "resume",commandOptions.resume, true);
+ putNestedIfNotNull(beanParams, "force",commandOptions.force, true);
variantFileDeleteParams = JacksonUtils.getDefaultObjectMapper().copy()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
@@ -412,6 +428,9 @@ private RestResponse aggregateVariantFamily() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -450,6 +469,9 @@ private RestResponse indexVariantFamily() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -489,6 +511,9 @@ private RestResponse indexVariant() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -554,6 +579,9 @@ private RestResponse launcherVariantIndex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -624,6 +652,9 @@ private RestResponse runVariantJulie() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
@@ -659,6 +690,9 @@ private RestResponse repairVariantMetadata() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
VariantStorageMetadataRepairToolParams variantStorageMetadataRepairToolParams = null;
@@ -692,6 +726,9 @@ private RestResponse synchronizeVariantMetadata() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -729,6 +766,9 @@ private RestResponse pruneVariant() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
VariantPruneParams variantPruneParams = null;
@@ -763,6 +803,9 @@ private RestResponse deleteVariantSample() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -801,6 +844,9 @@ private RestResponse indexVariantSample() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -867,6 +913,9 @@ private RestResponse deleteVariantScore() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
queryParams.putIfNotEmpty("name", commandOptions.name);
queryParams.putIfNotNull("resume", commandOptions.resume);
@@ -888,6 +937,9 @@ private RestResponse indexVariantScore() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -929,6 +981,9 @@ private RestResponse variantSecondaryAnnotationIndex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
@@ -968,6 +1023,9 @@ private RestResponse variantSecondarySampleIndex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
@@ -1034,6 +1092,9 @@ private RestResponse secondaryIndexVariant() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("project", commandOptions.project);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
@@ -1073,6 +1134,9 @@ private RestResponse deleteVariantSecondaryIndex() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
queryParams.putIfNotEmpty("samples", commandOptions.samples);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
@@ -1093,6 +1157,9 @@ private RestResponse deleteVariantStats() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1130,6 +1197,9 @@ private RestResponse indexVariantStats() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
}
@@ -1170,6 +1240,9 @@ private RestResponse deleteVariantStudy() throws Exception {
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("study", commandOptions.study);
if (queryParams.get("study") == null && OpencgaMain.isShellMode()) {
queryParams.putIfNotEmpty("study", sessionManager.getSession().getCurrentStudy());
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OrganizationsCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OrganizationsCommandExecutor.java
index 991f44fd9d8..c0ce6156d34 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OrganizationsCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OrganizationsCommandExecutor.java
@@ -12,6 +12,7 @@
import org.opencb.opencga.app.cli.main.options.OrganizationsCommandOptions;
import org.opencb.opencga.catalog.exceptions.CatalogAuthenticationException;
import org.opencb.opencga.catalog.utils.ParamUtils.AddRemoveAction;
+import org.opencb.opencga.catalog.utils.ParamUtils.UpdateAction;
import org.opencb.opencga.client.exceptions.ClientException;
import org.opencb.opencga.core.common.JacksonUtils;
import org.opencb.opencga.core.config.Optimizations;
@@ -23,6 +24,10 @@
import org.opencb.opencga.core.models.organizations.OrganizationCreateParams;
import org.opencb.opencga.core.models.organizations.OrganizationUpdateParams;
import org.opencb.opencga.core.models.organizations.TokenConfiguration;
+import org.opencb.opencga.core.models.user.OrganizationUserUpdateParams;
+import org.opencb.opencga.core.models.user.User;
+import org.opencb.opencga.core.models.user.UserQuota;
+import org.opencb.opencga.core.models.user.UserStatusUpdateParams;
import org.opencb.opencga.core.response.QueryType;
import org.opencb.opencga.core.response.RestResponse;
@@ -75,6 +80,15 @@ public void execute() throws Exception {
case "notes-update":
queryResponse = updateNotes();
break;
+ case "update-status-user":
+ queryResponse = userUpdateStatus();
+ break;
+ case "user-update":
+ queryResponse = updateUser();
+ break;
+ case "configuration-update":
+ queryResponse = updateConfiguration();
+ break;
case "info":
queryResponse = info();
break;
@@ -116,6 +130,7 @@ private RestResponse create() throws Exception {
putNestedIfNotEmpty(beanParams, "name",commandOptions.name, true);
putNestedIfNotEmpty(beanParams, "creationDate",commandOptions.creationDate, true);
putNestedIfNotEmpty(beanParams, "modificationDate",commandOptions.modificationDate, true);
+ putNestedIfNotEmpty(beanParams, "configuration.defaultUserExpirationDate",commandOptions.configurationDefaultUserExpirationDate, true);
putNestedIfNotNull(beanParams, "attributes",commandOptions.attributes, true);
organizationCreateParams = JacksonUtils.getDefaultObjectMapper().copy()
@@ -223,6 +238,113 @@ private RestResponse updateNotes() throws Exception {
return openCGAClient.getOrganizationClient().updateNotes(commandOptions.id, noteUpdateParams, queryParams);
}
+ private RestResponse userUpdateStatus() throws Exception {
+ logger.debug("Executing userUpdateStatus in Organizations command line");
+
+ OrganizationsCommandOptions.UserUpdateStatusCommandOptions commandOptions = organizationsCommandOptions.userUpdateStatusCommandOptions;
+
+ ObjectMap queryParams = new ObjectMap();
+ queryParams.putIfNotEmpty("include", commandOptions.include);
+ queryParams.putIfNotEmpty("exclude", commandOptions.exclude);
+ queryParams.putIfNotEmpty("organization", commandOptions.organization);
+ queryParams.putIfNotNull("includeResult", commandOptions.includeResult);
+
+
+ UserStatusUpdateParams userStatusUpdateParams = null;
+ if (commandOptions.jsonDataModel) {
+ RestResponse res = new RestResponse<>();
+ res.setType(QueryType.VOID);
+ PrintUtils.println(getObjectAsJSON(categoryName,"/{apiVersion}/organizations/user/{user}/status/update"));
+ return res;
+ } else if (commandOptions.jsonFile != null) {
+ userStatusUpdateParams = JacksonUtils.getDefaultObjectMapper()
+ .readValue(new java.io.File(commandOptions.jsonFile), UserStatusUpdateParams.class);
+ } else {
+ ObjectMap beanParams = new ObjectMap();
+ putNestedIfNotEmpty(beanParams, "status",commandOptions.status, true);
+
+ userStatusUpdateParams = JacksonUtils.getDefaultObjectMapper().copy()
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
+ .readValue(beanParams.toJson(), UserStatusUpdateParams.class);
+ }
+ return openCGAClient.getOrganizationClient().userUpdateStatus(commandOptions.user, userStatusUpdateParams, queryParams);
+ }
+
+ private RestResponse updateUser() throws Exception {
+ logger.debug("Executing updateUser in Organizations command line");
+
+ OrganizationsCommandOptions.UpdateUserCommandOptions commandOptions = organizationsCommandOptions.updateUserCommandOptions;
+
+ ObjectMap queryParams = new ObjectMap();
+ queryParams.putIfNotEmpty("include", commandOptions.include);
+ queryParams.putIfNotEmpty("exclude", commandOptions.exclude);
+ queryParams.putIfNotEmpty("organization", commandOptions.organization);
+ queryParams.putIfNotNull("includeResult", commandOptions.includeResult);
+
+
+ OrganizationUserUpdateParams organizationUserUpdateParams = null;
+ if (commandOptions.jsonDataModel) {
+ RestResponse res = new RestResponse<>();
+ res.setType(QueryType.VOID);
+ PrintUtils.println(getObjectAsJSON(categoryName,"/{apiVersion}/organizations/user/{user}/update"));
+ return res;
+ } else if (commandOptions.jsonFile != null) {
+ organizationUserUpdateParams = JacksonUtils.getDefaultObjectMapper()
+ .readValue(new java.io.File(commandOptions.jsonFile), OrganizationUserUpdateParams.class);
+ } else {
+ ObjectMap beanParams = new ObjectMap();
+ putNestedIfNotEmpty(beanParams, "name",commandOptions.name, true);
+ putNestedIfNotEmpty(beanParams, "email",commandOptions.email, true);
+ putNestedIfNotNull(beanParams, "quota.diskUsage",commandOptions.quotaDiskUsage, true);
+ putNestedIfNotNull(beanParams, "quota.cpuUsage",commandOptions.quotaCpuUsage, true);
+ putNestedIfNotNull(beanParams, "quota.maxDisk",commandOptions.quotaMaxDisk, true);
+ putNestedIfNotNull(beanParams, "quota.maxCpu",commandOptions.quotaMaxCpu, true);
+ putNestedIfNotEmpty(beanParams, "account.expirationDate",commandOptions.accountExpirationDate, true);
+ putNestedIfNotNull(beanParams, "attributes",commandOptions.attributes, true);
+
+ organizationUserUpdateParams = JacksonUtils.getDefaultObjectMapper().copy()
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
+ .readValue(beanParams.toJson(), OrganizationUserUpdateParams.class);
+ }
+ return openCGAClient.getOrganizationClient().updateUser(commandOptions.user, organizationUserUpdateParams, queryParams);
+ }
+
+ private RestResponse updateConfiguration() throws Exception {
+ logger.debug("Executing updateConfiguration in Organizations command line");
+
+ OrganizationsCommandOptions.UpdateConfigurationCommandOptions commandOptions = organizationsCommandOptions.updateConfigurationCommandOptions;
+
+ ObjectMap queryParams = new ObjectMap();
+ queryParams.putIfNotEmpty("include", commandOptions.include);
+ queryParams.putIfNotEmpty("exclude", commandOptions.exclude);
+ queryParams.putIfNotNull("includeResult", commandOptions.includeResult);
+ queryParams.putIfNotNull("authenticationOriginsAction", commandOptions.authenticationOriginsAction);
+
+
+ OrganizationConfiguration organizationConfiguration = null;
+ if (commandOptions.jsonDataModel) {
+ RestResponse res = new RestResponse<>();
+ res.setType(QueryType.VOID);
+ PrintUtils.println(getObjectAsJSON(categoryName,"/{apiVersion}/organizations/{organization}/configuration/update"));
+ return res;
+ } else if (commandOptions.jsonFile != null) {
+ organizationConfiguration = JacksonUtils.getDefaultObjectMapper()
+ .readValue(new java.io.File(commandOptions.jsonFile), OrganizationConfiguration.class);
+ } else {
+ ObjectMap beanParams = new ObjectMap();
+ putNestedIfNotEmpty(beanParams, "defaultUserExpirationDate",commandOptions.defaultUserExpirationDate, true);
+ putNestedIfNotNull(beanParams, "optimizations.simplifyPermissions",commandOptions.optimizationsSimplifyPermissions, true);
+ putNestedIfNotEmpty(beanParams, "token.algorithm",commandOptions.tokenAlgorithm, true);
+ putNestedIfNotEmpty(beanParams, "token.secretKey",commandOptions.tokenSecretKey, true);
+ putNestedIfNotNull(beanParams, "token.expiration",commandOptions.tokenExpiration, true);
+
+ organizationConfiguration = JacksonUtils.getDefaultObjectMapper().copy()
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
+ .readValue(beanParams.toJson(), OrganizationConfiguration.class);
+ }
+ return openCGAClient.getOrganizationClient().updateConfiguration(commandOptions.organization, organizationConfiguration, queryParams);
+ }
+
private RestResponse info() throws Exception {
logger.debug("Executing info in Organizations command line");
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/StudiesCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/StudiesCommandExecutor.java
index 645c65e2974..2e8bd7b0040 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/StudiesCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/StudiesCommandExecutor.java
@@ -521,6 +521,9 @@ private RestResponse runTemplates() throws Exception {
queryParams.putIfNotEmpty("jobDependsOn", commandOptions.jobDependsOn);
queryParams.putIfNotEmpty("jobDescription", commandOptions.jobDescription);
queryParams.putIfNotEmpty("jobTags", commandOptions.jobTags);
+ queryParams.putIfNotEmpty("jobScheduledStartTime", commandOptions.jobScheduledStartTime);
+ queryParams.putIfNotEmpty("jobPriority", commandOptions.jobPriority);
+ queryParams.putIfNotNull("jobDryRun", commandOptions.jobDryRun);
queryParams.putIfNotEmpty("id", commandOptions.id);
queryParams.putIfNotNull("overwrite", commandOptions.overwrite);
queryParams.putIfNotNull("resume", commandOptions.resume);
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/UsersCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/UsersCommandExecutor.java
index 6eeeae17408..4883cedef5c 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/UsersCommandExecutor.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/UsersCommandExecutor.java
@@ -305,7 +305,6 @@ private RestResponse update() throws Exception {
ObjectMap beanParams = new ObjectMap();
putNestedIfNotEmpty(beanParams, "name",commandOptions.name, true);
putNestedIfNotEmpty(beanParams, "email",commandOptions.email, true);
- putNestedIfNotNull(beanParams, "attributes",commandOptions.attributes, true);
userUpdateParams = JacksonUtils.getDefaultObjectMapper().copy()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/io/VcfOutputWriter.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/io/VcfOutputWriter.java
index 6093c975a32..0c398dd2ef6 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/io/VcfOutputWriter.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/io/VcfOutputWriter.java
@@ -9,7 +9,7 @@
import org.opencb.biodata.models.variant.metadata.VariantStudyMetadata;
import org.opencb.biodata.models.variant.protobuf.VariantProto;
import org.opencb.opencga.core.response.RestResponse;
-import org.opencb.opencga.core.response.VariantQueryResult;
+import org.opencb.opencga.storage.core.variant.query.VariantQueryResult;
import org.opencb.opencga.storage.core.variant.io.VcfDataWriter;
import java.io.PrintStream;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisAlignmentCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisAlignmentCommandOptions.java
index 46abae24683..61cc3634fb1 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisAlignmentCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisAlignmentCommandOptions.java
@@ -95,6 +95,15 @@ public class RunBwaCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
@@ -142,14 +151,23 @@ public class RunCoverageIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
- @Parameter(names = {"--bam-file-id"}, description = "The body web service bamFileId parameter", required = false, arity = 1)
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
+ @Parameter(names = {"--bam-file-id"}, description = "BAM file ID.", required = false, arity = 1)
public String bamFileId;
- @Parameter(names = {"--bai-file-id"}, description = "The body web service baiFileId parameter", required = false, arity = 1)
+ @Parameter(names = {"--bai-file-id"}, description = "BAI file ID.", required = false, arity = 1)
public String baiFileId;
- @Parameter(names = {"--window-size"}, description = "The body web service windowSize parameter", required = false, arity = 1)
- public Integer windowSize;
+ @Parameter(names = {"--window-size"}, description = "Window size (i.e., the size of the bins, in bases, for the output of the BIGWIG file).", required = false, arity = 1)
+ public Integer windowSize = 50;
}
@@ -180,6 +198,15 @@ public class CoverageQcGeneCoverageStatsRunCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--bam-file"}, description = "The body web service bamFile parameter", required = false, arity = 1)
public String bamFile;
@@ -311,6 +338,15 @@ public class RunDeeptoolsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
@@ -349,6 +385,15 @@ public class RunFastqcCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--input-file"}, description = "The body web service inputFile parameter", required = false, arity = 1)
public String inputFile;
@@ -387,10 +432,19 @@ public class RunIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
- @Parameter(names = {"--file"}, description = "The body web service file parameter", required = false, arity = 1)
- public String file;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
+ @Parameter(names = {"--file-id"}, description = "File ID, (i.e., BAM/CRAM file ID).", required = false, arity = 1)
+ public String fileId;
- @Parameter(names = {"--overwrite"}, description = "The body web service overwrite parameter", required = false, help = true, arity = 0)
+ @Parameter(names = {"--overwrite"}, description = "Flag to force indexing.", required = false, help = true, arity = 0)
public boolean overwrite = false;
}
@@ -422,6 +476,15 @@ public class RunPicardCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
@@ -460,6 +523,15 @@ public class RunQcCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--bam-file"}, description = "ID for the BAM file to process.", required = false, arity = 1)
public String bamFile;
@@ -569,6 +641,15 @@ public class RunSamtoolsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java
index fcfe1679c19..7a80b5b62dc 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java
@@ -611,6 +611,15 @@ public class RunInterpreterCancerTieringCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--clinical-analysis"}, description = "The body web service clinicalAnalysis parameter", required = false, arity = 1)
public String clinicalAnalysis;
@@ -649,6 +658,15 @@ public class RunInterpreterExomiserCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--clinical-analysis"}, description = "The body web service clinicalAnalysis parameter", required = false, arity = 1)
public String clinicalAnalysis;
@@ -681,6 +699,15 @@ public class RunInterpreterTeamCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--clinical-analysis"}, description = "The body web service clinicalAnalysis parameter", required = false, arity = 1)
public String clinicalAnalysis;
@@ -722,6 +749,15 @@ public class RunInterpreterTieringCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--clinical-analysis"}, description = "The body web service clinicalAnalysis parameter", required = false, arity = 1)
public String clinicalAnalysis;
@@ -763,6 +799,15 @@ public class RunInterpreterZettaCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--clinical-analysis"}, description = "The body web service clinicalAnalysis parameter", required = false, arity = 1)
public String clinicalAnalysis;
@@ -945,6 +990,15 @@ public class LoadCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--file"}, description = "The body web service file parameter", required = false, arity = 1)
public String file;
@@ -1232,6 +1286,15 @@ public class RunRgaIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--auxiliar-index"}, description = "Index auxiliar collection to improve performance assuming RGA is completely indexed.", required = false, help = true, arity = 0)
public boolean auxiliarIndex = false;
@@ -1721,7 +1784,7 @@ public class QueryVariantCommandOptions {
@Parameter(names = {"--include-interpretation"}, description = "Interpretation ID to include the fields related to this interpretation", required = false, arity = 1)
public String includeInterpretation;
- @Parameter(names = {"--id"}, description = "List of IDs, these can be rs IDs (dbSNP) or variants in the format chrom:start:ref:alt, e.g. rs116600158,19:7177679:C:T", required = false, arity = 1)
+ @Parameter(names = {"--id"}, description = "List of variant IDs in the format chrom:start:ref:alt, e.g. 19:7177679:C:T", required = false, arity = 1)
public String id;
@Parameter(names = {"--region"}, description = "List of regions, these can be just a single chromosome name or regions in the format chr:start-end, e.g.: 2,3:100000-200000", required = false, arity = 1)
@@ -1802,7 +1865,7 @@ public class QueryVariantCommandOptions {
@Parameter(names = {"--ct"}, description = "List of SO consequence types, e.g. missense_variant,stop_lost or SO:0001583,SO:0001578. Accepts aliases 'loss_of_function' and 'protein_altering'", required = false, arity = 1)
public String ct;
- @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, ...", required = false, arity = 1)
+ @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, HGVS ...", required = false, arity = 1)
public String xref;
@Parameter(names = {"--biotype"}, description = "List of biotypes, e.g. protein_coding", required = false, arity = 1)
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java
index 82b9edc17a4..1c83e822d82 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java
@@ -177,7 +177,7 @@ public class AggregationStatsCommandOptions {
@Parameter(names = {"--ct"}, description = "List of SO consequence types, e.g. missense_variant,stop_lost or SO:0001583,SO:0001578. Accepts aliases 'loss_of_function' and 'protein_altering'", required = false, arity = 1)
public String ct;
- @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, ...", required = false, arity = 1)
+ @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, HGVS ...", required = false, arity = 1)
public String xref;
@Parameter(names = {"--biotype"}, description = "List of biotypes, e.g. protein_coding", required = false, arity = 1)
@@ -259,7 +259,7 @@ public class QueryAnnotationCommandOptions {
@ParametersDelegate
public CommonCommandOptions commonOptions = commonCommandOptions;
- @Parameter(names = {"--id"}, description = "List of IDs, these can be rs IDs (dbSNP) or variants in the format chrom:start:ref:alt, e.g. rs116600158,19:7177679:C:T", required = false, arity = 1)
+ @Parameter(names = {"--id"}, description = "List of variant IDs in the format chrom:start:ref:alt, e.g. 19:7177679:C:T", required = false, arity = 1)
public String id;
@Parameter(names = {"--region"}, description = "List of regions, these can be just a single chromosome name or regions in the format chr:start-end, e.g.: 2,3:100000-200000", required = false, arity = 1)
@@ -366,6 +366,15 @@ public class RunCohortStatsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--cohort"}, description = "The body web service cohort parameter", required = false, arity = 1)
public String cohort;
@@ -410,10 +419,22 @@ public class RunExomiserCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
- @Parameter(names = {"--sample"}, description = "The body web service sample parameter", required = false, arity = 1)
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
+ @Parameter(names = {"--sample"}, description = "Sample ID.", required = false, arity = 1)
public String sample;
- @Parameter(names = {"--outdir"}, description = "The body web service outdir parameter", required = false, arity = 1)
+ @Parameter(names = {"--clinical-analysis-type"}, description = "Clinical analysis type: SINGLE or FAMILY.", required = false, arity = 1)
+ public String clinicalAnalysisType = "SINGLE";
+
+ @Parameter(names = {"--outdir"}, description = "Output dir for the job.", required = false, arity = 1)
public String outdir;
}
@@ -454,6 +475,15 @@ public class RunExportCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--id"}, description = "The body web service id parameter", required = false, arity = 1)
public String id;
@@ -770,6 +800,15 @@ public class RunFamilyQcCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--family"}, description = "The body web service family parameter", required = false, arity = 1)
public String family;
@@ -802,6 +841,15 @@ public class DeleteFileCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -840,6 +888,15 @@ public class RunGatkCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
@@ -878,6 +935,15 @@ public class RunGenomePlotCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--sample"}, description = "The body web service sample parameter", required = false, arity = 1)
public String sample;
@@ -922,6 +988,15 @@ public class RunGwasCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--phenotype"}, description = "The body web service phenotype parameter", required = false, arity = 1)
public String phenotype;
@@ -987,13 +1062,22 @@ public class RunHrDetectCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--id"}, description = "ID to identify the HRDetect results.", required = false, arity = 1)
public String id;
@Parameter(names = {"--description"}, description = "Decription for these particular HRDetect results.", required = false, arity = 1)
public String description;
- @Parameter(names = {"--sample-id"}, description = "Sample data model hosts information about any biological material, normally extracted from an _Individual_, that is used for a particular analysis. This is the main data model, it stores the most basic and important information.", required = false, arity = 1)
+ @Parameter(names = {"--sample-id"}, description = "Sample ID.", required = false, arity = 1)
public String sampleId;
@Parameter(names = {"--snv-fitting-id"}, description = "Mutational signature fitting ID for SNV.", required = false, arity = 1)
@@ -1055,6 +1139,15 @@ public class RunIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--file"}, description = "List of files to be indexed.", required = false, arity = 1)
public String file;
@@ -1079,7 +1172,7 @@ public class RunIndexCommandOptions {
@Parameter(names = {"--fail-on-malformed-lines"}, description = "Fail when encountering malformed lines. (yes, no, auto) [auto]", required = false, arity = 1)
public String failOnMalformedLines;
- @Parameter(names = {"--family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO and execute 'family-index' afterwards", required = false, help = true, arity = 0)
+ @Parameter(names = {"--family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO", required = false, help = true, arity = 0)
public boolean family = false;
@Parameter(names = {"--somatic"}, description = "Indicate that the files to be loaded contain somatic samples. This will set 'load-hom-ref' to YES if it was in AUTO.", required = false, help = true, arity = 0)
@@ -1174,6 +1267,15 @@ public class RunIndividualQcCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--individual"}, description = "Individual ID", required = false, arity = 1)
public String individual;
@@ -1215,6 +1317,15 @@ public class RunInferredSexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--individual"}, description = "Individual ID", required = false, arity = 1)
public String individual;
@@ -1293,6 +1404,15 @@ public class RunKnockoutCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--sample"}, description = "The body web service sample parameter", required = false, arity = 1)
public String sample;
@@ -1352,6 +1472,15 @@ public class RunMendelianErrorCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--family"}, description = "The body web service family parameter", required = false, arity = 1)
public String family;
@@ -1490,6 +1619,15 @@ public class RunMutationalSignatureCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--id"}, description = "Signature ID.", required = false, arity = 1)
public String id;
@@ -1567,6 +1705,15 @@ public class RunPlinkCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--outdir"}, description = "The body web service outdir parameter", required = false, arity = 1)
public String outdir;
@@ -1611,7 +1758,7 @@ public class QueryCommandOptions {
@Parameter(names = {"--saved-filter"}, description = "Use a saved filter at User level", required = false, arity = 1)
public String savedFilter;
- @Parameter(names = {"--id"}, description = "List of IDs, these can be rs IDs (dbSNP) or variants in the format chrom:start:ref:alt, e.g. rs116600158,19:7177679:C:T", required = false, arity = 1)
+ @Parameter(names = {"--id"}, description = "List of variant IDs in the format chrom:start:ref:alt, e.g. 19:7177679:C:T", required = false, arity = 1)
public String id;
@Parameter(names = {"--region"}, description = "List of regions, these can be just a single chromosome name or regions in the format chr:start-end, e.g.: 2,3:100000-200000", required = false, arity = 1)
@@ -1737,7 +1884,7 @@ public class QueryCommandOptions {
@Parameter(names = {"--ct"}, description = "List of SO consequence types, e.g. missense_variant,stop_lost or SO:0001583,SO:0001578. Accepts aliases 'loss_of_function' and 'protein_altering'", required = false, arity = 1)
public String ct;
- @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, ...", required = false, arity = 1)
+ @Parameter(names = {"--xref"}, description = "List of any external reference, these can be genes, proteins or variants. Accepted IDs include HGNC, Ensembl genes, dbSNP, ClinVar, HPO, Cosmic, HGVS ...", required = false, arity = 1)
public String xref;
@Parameter(names = {"--biotype"}, description = "List of biotypes, e.g. protein_coding", required = false, arity = 1)
@@ -1841,6 +1988,15 @@ public class RunRelatednessCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--individuals"}, description = "The body web service individuals parameter", required = false, arity = 1)
public String individuals;
@@ -1885,6 +2041,15 @@ public class RunRvtestsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--command"}, description = "The body web service command parameter", required = false, arity = 1)
public String command;
@@ -1997,6 +2162,15 @@ public class RunSampleEligibilityCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--query"}, description = "The body web service query parameter", required = false, arity = 1)
public String query;
@@ -2035,7 +2209,16 @@ public class RunSampleQcCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
- @Parameter(names = {"--sample"}, description = "Sample data model hosts information about any biological material, normally extracted from an _Individual_, that is used for a particular analysis. This is the main data model, it stores the most basic and important information.", required = false, arity = 1)
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
+ @Parameter(names = {"--sample"}, description = "Sample ID.", required = false, arity = 1)
public String sample;
@Parameter(names = {"--vs-id"}, description = "Variant stats ID.", required = false, arity = 1)
@@ -2228,6 +2411,15 @@ public class RunSampleCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--id"}, description = "The body web service id parameter", required = false, arity = 1)
public String id;
@@ -2400,6 +2592,15 @@ public class RunSampleStatsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--sample"}, description = "The body web service sample parameter", required = false, arity = 1)
public String sample;
@@ -2540,6 +2741,15 @@ public class RunStatsExportCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--cohorts"}, description = "The body web service cohorts parameter", required = false, arity = 1)
public String cohorts;
@@ -2584,6 +2794,15 @@ public class RunStatsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--cohort"}, description = "The body web service cohort parameter", required = false, arity = 1)
public String cohort;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java
index a752ded42f5..d69121d7c21 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java
@@ -243,6 +243,15 @@ public class ImportCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--source"}, description = "Comma separated list of sources to import panels from. Current supported sources are 'panelapp' and 'cancer-gene-census'", required = false, arity = 1)
public String source;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java
index 8001c0d6e63..dfbd2cb0e5d 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java
@@ -363,6 +363,15 @@ public class FetchCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -459,6 +468,15 @@ public class RunLinkCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--uri", "--input", "-i"}, description = "The body web service uri parameter", required = false, arity = 1)
public String uri;
@@ -506,6 +524,15 @@ public class RunPostlinkCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--files"}, description = "The body web service files parameter", required = false, arity = 1)
public String files;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java
index 3902f2a61a8..327d9487dfb 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java
@@ -43,6 +43,7 @@ public class JobsCommandOptions extends CustomJobsCommandOptions {
public DeleteCommandOptions deleteCommandOptions;
public InfoCommandOptions infoCommandOptions;
public UpdateCommandOptions updateCommandOptions;
+ public KillCommandOptions killCommandOptions;
public HeadLogCommandOptions headLogCommandOptions;
public TailLogCommandOptions tailLogCommandOptions;
@@ -60,6 +61,7 @@ public JobsCommandOptions(CommonCommandOptions commonCommandOptions, JCommander
this.deleteCommandOptions = new DeleteCommandOptions();
this.infoCommandOptions = new InfoCommandOptions();
this.updateCommandOptions = new UpdateCommandOptions();
+ this.killCommandOptions = new KillCommandOptions();
this.headLogCommandOptions = new HeadLogCommandOptions();
this.tailLogCommandOptions = new TailLogCommandOptions();
@@ -257,6 +259,9 @@ public class RetryCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -446,6 +451,26 @@ public class UpdateCommandOptions {
}
+ @Parameters(commandNames = {"kill"}, commandDescription ="Send a signal to kill a pending or running job")
+ public class KillCommandOptions {
+
+ @ParametersDelegate
+ public CommonCommandOptions commonOptions = commonCommandOptions;
+
+ @Parameter(names = {"--json-file"}, description = "File with the body data in JSON format. Note, that using this parameter will ignore all the other parameters.", required = false, arity = 1)
+ public String jsonFile;
+
+ @Parameter(names = {"--json-data-model"}, description = "Show example of file structure for body data.", help = true, arity = 0)
+ public Boolean jsonDataModel = false;
+
+ @Parameter(names = {"--job"}, description = "Job ID or UUID", required = true, arity = 1)
+ public String job;
+
+ @Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
+ public String study;
+
+ }
+
@Parameters(commandNames = {"log-head"}, commandDescription ="Show the first lines of a log file (up to a limit)")
public class HeadLogCommandOptions {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java
index babd0e312f2..4d398070124 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java
@@ -157,13 +157,22 @@ public class AggregateVariantCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
- @Parameter(names = {"--overwrite"}, description = "The body web service overwrite parameter", required = false, help = true, arity = 0)
+ @Parameter(names = {"--overwrite"}, description = "Overwrite aggregation for all files and variants. Repeat operation for already processed variants.", required = false, help = true, arity = 0)
public boolean overwrite = false;
- @Parameter(names = {"--resume"}, description = "The body web service resume parameter", required = false, help = true, arity = 0)
+ @Parameter(names = {"--resume"}, description = "Resume a previously failed index operation", required = false, help = true, arity = 0)
public boolean resume = false;
}
@@ -186,6 +195,15 @@ public class DeleteVariantAnnotationCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "Project [organization@]project where project can be either the ID or the alias", required = false, arity = 1)
public String project;
@@ -218,6 +236,15 @@ public class IndexVariantAnnotationCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "Project [organization@]project where project can be either the ID or the alias", required = false, arity = 1)
public String project;
@@ -277,10 +304,19 @@ public class SaveVariantAnnotationCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "Project [organization@]project where project can be either the ID or the alias", required = false, arity = 1)
public String project;
- @Parameter(names = {"--annotation-id"}, description = "The body web service annotationId parameter", required = false, arity = 1)
+ @Parameter(names = {"--annotation-id"}, description = "New Variant Annotation identifier", required = false, arity = 1)
public String annotationId;
}
@@ -332,6 +368,15 @@ public class DeleteVariantCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -341,6 +386,9 @@ public class DeleteVariantCommandOptions {
@Parameter(names = {"--resume"}, description = "The body web service resume parameter", required = false, help = true, arity = 0)
public boolean resume = false;
+ @Parameter(names = {"--force"}, description = "The body web service force parameter", required = false, help = true, arity = 0)
+ public boolean force = false;
+
}
@Parameters(commandNames = {"variant-family-aggregate"}, commandDescription ="Find variants where not all the samples are present, and fill the empty values.")
@@ -367,16 +415,25 @@ public class AggregateVariantFamilyCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
- @Parameter(names = {"--samples"}, description = "The body web service samples parameter", required = false, arity = 1)
+ @Parameter(names = {"--samples"}, description = "Samples within the same study to aggregate", required = false, arity = 1)
public String samples;
- @Parameter(names = {"--gaps-genotype"}, description = "The body web service gapsGenotype parameter", required = false, arity = 1)
+ @Parameter(names = {"--gaps-genotype"}, description = "Genotype to be used in gaps. Either 0/0, ./. or ?/?", required = false, arity = 1)
public String gapsGenotype;
- @Parameter(names = {"--resume"}, description = "The body web service resume parameter", required = false, help = true, arity = 0)
+ @Parameter(names = {"--resume"}, description = "Resume a previously failed index operation", required = false, help = true, arity = 0)
public boolean resume = false;
}
@@ -405,6 +462,15 @@ public class IndexVariantFamilyCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -446,6 +512,15 @@ public class IndexVariantCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -473,7 +548,7 @@ public class IndexVariantCommandOptions {
@Parameter(names = {"--fail-on-malformed-lines"}, description = "Fail when encountering malformed lines. (yes, no, auto) [auto]", required = false, arity = 1)
public String failOnMalformedLines;
- @Parameter(names = {"--family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO and execute 'family-index' afterwards", required = false, help = true, arity = 0)
+ @Parameter(names = {"--family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO", required = false, help = true, arity = 0)
public boolean family = false;
@Parameter(names = {"--somatic"}, description = "Indicate that the files to be loaded contain somatic samples. This will set 'load-hom-ref' to YES if it was in AUTO.", required = false, help = true, arity = 0)
@@ -565,6 +640,15 @@ public class LauncherVariantIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -607,7 +691,7 @@ public class LauncherVariantIndexCommandOptions {
@Parameter(names = {"--index-params-fail-on-malformed-lines"}, description = "Fail when encountering malformed lines. (yes, no, auto) [auto]", required = false, arity = 1)
public String indexParamsFailOnMalformedLines;
- @Parameter(names = {"--index-params-family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO and execute 'family-index' afterwards", required = false, help = true, arity = 0)
+ @Parameter(names = {"--index-params-family"}, description = "Indicate that the files to be loaded are part of a family. This will set 'load-hom-ref' to YES if it was in AUTO", required = false, help = true, arity = 0)
public boolean indexParamsFamily = false;
@Parameter(names = {"--index-params-somatic"}, description = "Indicate that the files to be loaded contain somatic samples. This will set 'load-hom-ref' to YES if it was in AUTO.", required = false, help = true, arity = 0)
@@ -699,6 +783,15 @@ public class RunVariantJulieCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "project", required = false, arity = 1)
public String project;
@@ -737,6 +830,15 @@ public class RepairVariantMetadataCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--studies"}, description = "The body web service studies parameter", required = false, arity = 1)
public String studies;
@@ -769,6 +871,15 @@ public class SynchronizeVariantMetadataCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -804,6 +915,15 @@ public class PruneVariantCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "The body web service project parameter", required = false, arity = 1)
public String project;
@@ -839,6 +959,15 @@ public class DeleteVariantSampleCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -877,6 +1006,15 @@ public class IndexVariantSampleCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -935,6 +1073,15 @@ public class DeleteVariantScoreCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -973,6 +1120,15 @@ public class IndexVariantScoreCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -1020,6 +1176,15 @@ public class VariantSecondaryAnnotationIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "Project [organization@]project where project can be either the ID or the alias", required = false, arity = 1)
public String project;
@@ -1061,6 +1226,15 @@ public class VariantSecondarySampleIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -1125,6 +1299,15 @@ public class SecondaryIndexVariantCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--project", "-p"}, description = "Project [organization@]project where project can be either the ID or the alias", required = false, arity = 1)
public String project;
@@ -1160,6 +1343,15 @@ public class DeleteVariantSecondaryIndexCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
@@ -1195,6 +1387,15 @@ public class DeleteVariantStatsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--cohort"}, description = "The body web service cohort parameter", required = false, arity = 1)
public String cohort;
@@ -1230,6 +1431,15 @@ public class IndexVariantStatsCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--cohort"}, description = "The body web service cohort parameter", required = false, arity = 1)
public String cohort;
@@ -1274,6 +1484,15 @@ public class DeleteVariantStudyCommandOptions {
@Parameter(names = {"--job-tags"}, description = "Job tags", required = false, arity = 1)
public String jobTags;
+ @Parameter(names = {"--job-scheduled-start-time"}, description = "Time when the job is scheduled to start.", required = false, arity = 1)
+ public String jobScheduledStartTime;
+
+ @Parameter(names = {"--job-priority"}, description = "Priority of the job", required = false, arity = 1)
+ public String jobPriority;
+
+ @Parameter(names = {"--job-dry-run"}, description = "Flag indicating that the job will be executed in dry-run mode. In this mode, OpenCGA will validate that all parameters and prerequisites are correctly set for successful execution, but the job will not actually run.", required = false, arity = 1)
+ public Boolean jobDryRun;
+
@Parameter(names = {"--study", "-s"}, description = "Study [[organization@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1)
public String study;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OrganizationsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OrganizationsCommandOptions.java
index c2ab1e89a90..68be35b6cac 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OrganizationsCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OrganizationsCommandOptions.java
@@ -38,6 +38,9 @@ public class OrganizationsCommandOptions {
public SearchNotesCommandOptions searchNotesCommandOptions;
public DeleteNotesCommandOptions deleteNotesCommandOptions;
public UpdateNotesCommandOptions updateNotesCommandOptions;
+ public UserUpdateStatusCommandOptions userUpdateStatusCommandOptions;
+ public UpdateUserCommandOptions updateUserCommandOptions;
+ public UpdateConfigurationCommandOptions updateConfigurationCommandOptions;
public InfoCommandOptions infoCommandOptions;
public UpdateCommandOptions updateCommandOptions;
@@ -51,6 +54,9 @@ public OrganizationsCommandOptions(CommonCommandOptions commonCommandOptions, JC
this.searchNotesCommandOptions = new SearchNotesCommandOptions();
this.deleteNotesCommandOptions = new DeleteNotesCommandOptions();
this.updateNotesCommandOptions = new UpdateNotesCommandOptions();
+ this.userUpdateStatusCommandOptions = new UserUpdateStatusCommandOptions();
+ this.updateUserCommandOptions = new UpdateUserCommandOptions();
+ this.updateConfigurationCommandOptions = new UpdateConfigurationCommandOptions();
this.infoCommandOptions = new InfoCommandOptions();
this.updateCommandOptions = new UpdateCommandOptions();
@@ -89,6 +95,9 @@ public class CreateCommandOptions {
@Parameter(names = {"--modification-date", "--md"}, description = "Autogenerated date following the format YYYYMMDDhhmmss containing the date when the entry was last modified.", required = false, arity = 1)
public String modificationDate;
+ @Parameter(names = {"--configuration-default-user-expiration-date"}, description = "The body web service defaultUserExpirationDate parameter", required = false, arity = 1)
+ public String configurationDefaultUserExpirationDate;
+
@DynamicParameter(names = {"--attributes"}, description = "You can use this field to store any other information, keep in mind this is not indexed so you cannot search by attributes.. Use: --attributes key=value", required = false)
public java.util.Map attributes = new HashMap<>(); //Dynamic parameters must be initialized;
@@ -216,6 +225,135 @@ public class UpdateNotesCommandOptions {
}
+ @Parameters(commandNames = {"update-status-user"}, commandDescription ="Update the user status")
+ public class UserUpdateStatusCommandOptions {
+
+ @ParametersDelegate
+ public CommonCommandOptions commonOptions = commonCommandOptions;
+
+ @Parameter(names = {"--json-file"}, description = "File with the body data in JSON format. Note, that using this parameter will ignore all the other parameters.", required = false, arity = 1)
+ public String jsonFile;
+
+ @Parameter(names = {"--json-data-model"}, description = "Show example of file structure for body data.", help = true, arity = 0)
+ public Boolean jsonDataModel = false;
+
+ @Parameter(names = {"--include", "-I"}, description = "Fields included in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String include;
+
+ @Parameter(names = {"--exclude", "-E"}, description = "Fields excluded in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String exclude;
+
+ @Parameter(names = {"--user", "-u"}, description = "User ID", required = true, arity = 1)
+ public String user;
+
+ @Parameter(names = {"--organization"}, description = "Organization id", required = false, arity = 1)
+ public String organization;
+
+ @Parameter(names = {"--include-result"}, description = "Flag indicating to include the created or updated document result in the response", required = false, help = true, arity = 0)
+ public boolean includeResult = false;
+
+ @Parameter(names = {"--status"}, description = "The body web service status parameter", required = false, arity = 1)
+ public String status;
+
+ }
+
+ @Parameters(commandNames = {"user-update"}, commandDescription ="Update the user information")
+ public class UpdateUserCommandOptions {
+
+ @ParametersDelegate
+ public CommonCommandOptions commonOptions = commonCommandOptions;
+
+ @Parameter(names = {"--json-file"}, description = "File with the body data in JSON format. Note, that using this parameter will ignore all the other parameters.", required = false, arity = 1)
+ public String jsonFile;
+
+ @Parameter(names = {"--json-data-model"}, description = "Show example of file structure for body data.", help = true, arity = 0)
+ public Boolean jsonDataModel = false;
+
+ @Parameter(names = {"--include", "-I"}, description = "Fields included in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String include;
+
+ @Parameter(names = {"--exclude", "-E"}, description = "Fields excluded in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String exclude;
+
+ @Parameter(names = {"--user", "-u"}, description = "User ID", required = true, arity = 1)
+ public String user;
+
+ @Parameter(names = {"--organization"}, description = "Organization id", required = false, arity = 1)
+ public String organization;
+
+ @Parameter(names = {"--include-result"}, description = "Flag indicating to include the created or updated document result in the response", required = false, help = true, arity = 0)
+ public boolean includeResult = false;
+
+ @Parameter(names = {"--name", "-n"}, description = "The body web service name parameter", required = false, arity = 1)
+ public String name;
+
+ @Parameter(names = {"--email"}, description = "The body web service email parameter", required = false, arity = 1)
+ public String email;
+
+ @Parameter(names = {"--quota-disk-usage"}, description = "The body web service diskUsage parameter", required = false, arity = 1)
+ public Long quotaDiskUsage;
+
+ @Parameter(names = {"--quota-cpu-usage"}, description = "The body web service cpuUsage parameter", required = false, arity = 1)
+ public Integer quotaCpuUsage;
+
+ @Parameter(names = {"--quota-max-disk"}, description = "The body web service maxDisk parameter", required = false, arity = 1)
+ public Long quotaMaxDisk;
+
+ @Parameter(names = {"--quota-max-cpu"}, description = "The body web service maxCpu parameter", required = false, arity = 1)
+ public Integer quotaMaxCpu;
+
+ @Parameter(names = {"--account-expiration-date"}, description = "The body web service expirationDate parameter", required = false, arity = 1)
+ public String accountExpirationDate;
+
+ @DynamicParameter(names = {"--attributes"}, description = "The body web service attributes parameter. Use: --attributes key=value", required = false)
+ public java.util.Map attributes = new HashMap<>(); //Dynamic parameters must be initialized;
+
+ }
+
+ @Parameters(commandNames = {"configuration-update"}, commandDescription ="Update the Organization configuration attributes")
+ public class UpdateConfigurationCommandOptions {
+
+ @ParametersDelegate
+ public CommonCommandOptions commonOptions = commonCommandOptions;
+
+ @Parameter(names = {"--json-file"}, description = "File with the body data in JSON format. Note, that using this parameter will ignore all the other parameters.", required = false, arity = 1)
+ public String jsonFile;
+
+ @Parameter(names = {"--json-data-model"}, description = "Show example of file structure for body data.", help = true, arity = 0)
+ public Boolean jsonDataModel = false;
+
+ @Parameter(names = {"--include", "-I"}, description = "Fields included in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String include;
+
+ @Parameter(names = {"--exclude", "-E"}, description = "Fields excluded in the response, whole JSON path must be provided", required = false, arity = 1)
+ public String exclude;
+
+ @Parameter(names = {"--organization"}, description = "Organization id", required = true, arity = 1)
+ public String organization;
+
+ @Parameter(names = {"--include-result"}, description = "Flag indicating to include the created or updated document result in the response", required = false, help = true, arity = 0)
+ public boolean includeResult = false;
+
+ @Parameter(names = {"--authentication-origins-action"}, description = "Action to be performed if the array of authenticationOrigins is being updated.", required = false, arity = 1)
+ public String authenticationOriginsAction = "ADD";
+
+ @Parameter(names = {"--default-user-expiration-date"}, description = "The body web service defaultUserExpirationDate parameter", required = false, arity = 1)
+ public String defaultUserExpirationDate;
+
+ @Parameter(names = {"--optimizations-simplify-permissions"}, description = "The body web service simplifyPermissions parameter", required = false, help = true, arity = 0)
+ public boolean optimizationsSimplifyPermissions = false;
+
+ @Parameter(names = {"--token-algorithm"}, description = "The body web service algorithm parameter", required = false, arity = 1)
+ public String tokenAlgorithm;
+
+ @Parameter(names = {"--token-secret-key"}, description = "The body web service secretKey parameter", required = false, arity = 1)
+ public String tokenSecretKey;
+
+ @Parameter(names = {"--token-expiration"}, description = "The body web service expiration parameter", required = false, arity = 1)
+ public Long tokenExpiration;
+
+ }
+
@Parameters(commandNames = {"info"}, commandDescription ="Return the organization information")
public class InfoCommandOptions {
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/UsersCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/UsersCommandOptions.java
index 885a2ffaa70..66d7cee55a8 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/UsersCommandOptions.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/UsersCommandOptions.java
@@ -285,9 +285,6 @@ public class UpdateCommandOptions {
@Parameter(names = {"--email"}, description = "The body web service email parameter", required = false, arity = 1)
public String email;
- @DynamicParameter(names = {"--attributes"}, description = "The body web service attributes parameter. Use: --attributes key=value", required = false)
- public java.util.Map attributes = new HashMap<>(); //Dynamic parameters must be initialized;
-
}
}
\ No newline at end of file
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_3/catalog/java/Migration1.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_3/catalog/java/Migration1.java
new file mode 100644
index 00000000000..425fd72353f
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_3/catalog/java/Migration1.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_0_3.catalog.java;
+
+import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "recalculate_roles", description = "Recalculate roles from Family #1763", version = "2.0.3", date = 20210528,
+ deprecatedSince = "3.0.0")
+public class Migration1 extends MigrationTool {
+
+ @Override
+ protected void run() throws CatalogException {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_5/catalog/java/initialiseGroups.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_5/catalog/java/initialiseGroups.java
new file mode 100644
index 00000000000..0c0273e7820
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_5/catalog/java/initialiseGroups.java
@@ -0,0 +1,15 @@
+package org.opencb.opencga.app.migrations.v2.v2_0_5.catalog.java;
+
+
+import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "initialise_groups", description = "Initialise userIds list from groups #1791", version = "2.0.5", date = 20210621,
+ deprecatedSince = "3.0.0")
+public class initialiseGroups extends MigrationTool {
+
+ @Override
+ protected void run() throws CatalogException {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_6/catalog/removeDeletedFileReferencesFromSample.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_6/catalog/removeDeletedFileReferencesFromSample.java
new file mode 100644
index 00000000000..b99e0a9f1d5
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_0_6/catalog/removeDeletedFileReferencesFromSample.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_0_6.catalog;
+
+
+import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "remove_file_references_from_sample", description = "Remove deleted file references from samples #1815", version = "2.0.6",
+ date = 20210901, deprecatedSince = "3.0.0")
+public class removeDeletedFileReferencesFromSample extends MigrationTool {
+
+ @Override
+ protected void run() throws CatalogException {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/AddAnnotationSetsInClinicalAnalysisMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/AddAnnotationSetsInClinicalAnalysisMigration.java
new file mode 100644
index 00000000000..06a78900ab0
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/AddAnnotationSetsInClinicalAnalysisMigration.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_12_0.catalog;
+
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_annotation_sets_to_clinical_analysis" ,
+ description = "Add private annotation fields to ClinicalAnalysis documents #TASK-5198",
+ version = "2.12.0",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20231116,
+ deprecatedSince = "3.0.0"
+)
+public class AddAnnotationSetsInClinicalAnalysisMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/CompleteClinicalReportDataModelMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/CompleteClinicalReportDataModelMigration.java
new file mode 100644
index 00000000000..96f702d96f4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_0/catalog/CompleteClinicalReportDataModelMigration.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_12_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_clinical_report_data_model" ,
+ description = "Complete Clinical Report data model #TASK-5198",
+ version = "2.12.0",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20231128,
+ deprecatedSince = "3.0.0"
+)
+public class CompleteClinicalReportDataModelMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_6/SyncCohortsAndSamplesMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_6/SyncCohortsAndSamplesMigration.java
new file mode 100644
index 00000000000..6f6f5cbf18d
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_12_6/SyncCohortsAndSamplesMigration.java
@@ -0,0 +1,73 @@
+package org.opencb.opencga.app.migrations.v2.v2_12_6;
+
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.Projections;
+import com.mongodb.client.model.Updates;
+import org.apache.commons.collections4.CollectionUtils;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.opencb.opencga.catalog.db.api.CohortDBAdaptor;
+import org.opencb.opencga.catalog.db.api.SampleDBAdaptor;
+import org.opencb.opencga.catalog.db.mongodb.MongoDBAdaptor;
+import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Migration(id = "syncCohortsAndSamplesMigration" ,
+ description = "Sync array of samples from cohort with array of cohortIds from Sample",
+ version = "2.12.6",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20240621
+)
+public class SyncCohortsAndSamplesMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ MongoCollection sampleCollection = getMongoCollection(OrganizationMongoDBAdaptorFactory.SAMPLE_COLLECTION);
+ MongoCollection sampleArchiveCollection = getMongoCollection(OrganizationMongoDBAdaptorFactory.SAMPLE_ARCHIVE_COLLECTION);
+
+ queryMongo(OrganizationMongoDBAdaptorFactory.COHORT_COLLECTION, new Document(),
+ Projections.include(CohortDBAdaptor.QueryParams.ID.key(), CohortDBAdaptor.QueryParams.SAMPLES.key()),
+ cohortDoc -> {
+ String cohortId = cohortDoc.getString(CohortDBAdaptor.QueryParams.ID.key());
+ List samples = cohortDoc.getList(CohortDBAdaptor.QueryParams.SAMPLES.key(), Document.class);
+ if (CollectionUtils.isNotEmpty(samples)) {
+ List sampleUids = samples
+ .stream()
+ .map(s -> s.get(SampleDBAdaptor.QueryParams.UID.key(), Number.class).longValue())
+ .collect(Collectors.toList());
+ // Ensure all those samples have a reference to the cohortId
+ Bson query = Filters.and(
+ Filters.in(SampleDBAdaptor.QueryParams.UID.key(), sampleUids),
+ Filters.eq(MongoDBAdaptor.LAST_OF_VERSION, true)
+ );
+ Bson update = Updates.addToSet(SampleDBAdaptor.QueryParams.COHORT_IDS.key(), cohortId);
+ long addedMissingCohort = sampleCollection.updateMany(query, update).getModifiedCount();
+ sampleArchiveCollection.updateMany(query, update);
+
+ // Ensure there aren't any samples pointing to this cohort that are not in the samples array
+ query = Filters.and(
+ Filters.nin(SampleDBAdaptor.QueryParams.UID.key(), sampleUids),
+ Filters.eq(SampleDBAdaptor.QueryParams.COHORT_IDS.key(), cohortId),
+ Filters.eq(MongoDBAdaptor.LAST_OF_VERSION, true)
+ );
+ update = Updates.pull(SampleDBAdaptor.QueryParams.COHORT_IDS.key(), cohortId);
+ long removedNonAssociatedCohort = sampleCollection.updateMany(query, update).getModifiedCount();
+ sampleArchiveCollection.updateMany(query, update);
+
+ if (addedMissingCohort > 0 || removedNonAssociatedCohort > 0) {
+ logger.info("Fixed cohort '{}' references. "
+ + "Added missing reference to {} samples. "
+ + "Removed non-associated reference from {} samples.",
+ cohortId, addedMissingCohort, removedNonAssociatedCohort);
+ }
+ }
+ });
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddMissingIndexes.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddMissingIndexes.java
new file mode 100644
index 00000000000..7efdea6a56a
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddMissingIndexes.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_missing_indexes",
+ description = "Add missing indexes", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210928,
+ deprecatedSince = "3.0.0")
+public class AddMissingIndexes extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddPanelsToInterpretations.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddPanelsToInterpretations.java
new file mode 100644
index 00000000000..a35f794d130
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/AddPanelsToInterpretations.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_panels_to_interpretations",
+ description = "Add panels to Interpretations #1802", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20210713,
+ deprecatedSince = "3.0.0")
+public class AddPanelsToInterpretations extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/CreateAuditIndexes.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/CreateAuditIndexes.java
new file mode 100644
index 00000000000..48cd8ce2f3b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/CreateAuditIndexes.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "create_audit_indexes", description = "Create Audit indexes", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210622,
+ deprecatedSince = "3.0.0")
+public class CreateAuditIndexes extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
+
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/PanelLock.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/PanelLock.java
new file mode 100644
index 00000000000..747feb3bbcb
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/PanelLock.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_panel_lock",
+ description = "Add new panelLock to ClinicalAnalysis #1802", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210713,
+ deprecatedSince = "3.0.0")
+public class PanelLock extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RemoveRCVersionsFromMigrationRuns.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RemoveRCVersionsFromMigrationRuns.java
new file mode 100644
index 00000000000..58625266d9b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RemoveRCVersionsFromMigrationRuns.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "remove_rc_version_from_migration_runs",
+ description = "Remove RC versions from migration runs stored in catalog", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210723,
+ deprecatedSince = "3.0.0")
+public class RemoveRCVersionsFromMigrationRuns extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RenameDatastoreConfigurationToOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RenameDatastoreConfigurationToOptions.java
new file mode 100644
index 00000000000..452e99d627f
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/RenameDatastoreConfigurationToOptions.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_datastore_configuration_to_options", description = "Rename project.internal.datastores.variant.configuration to options", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210617,
+ deprecatedSince = "3.0.0")
+public class RenameDatastoreConfigurationToOptions extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/StudyClinicalConfigurationRelocation.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/StudyClinicalConfigurationRelocation.java
new file mode 100644
index 00000000000..18e6272d7a6
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/StudyClinicalConfigurationRelocation.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "move_study_clinical_config_to_internal",
+ description = "Move Study ClinicalConfiguration to internal.configuration", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210708,
+ deprecatedSince = "3.0.0")
+public class StudyClinicalConfigurationRelocation extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/VariantFileStatsRelocation.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/VariantFileStatsRelocation.java
new file mode 100644
index 00000000000..f37d46cb9f2
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/java/VariantFileStatsRelocation.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.java;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "move_variant_file_stats_to_qc", description = "Move opencga_file_variant_stats annotation set from variable sets to " +
+ "FileQualityControl", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ patch = 1,
+ date = 20210614,
+ deprecatedSince = "3.0.0")
+public class VariantFileStatsRelocation extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration1.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration1.java
new file mode 100644
index 00000000000..0530e369b04
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration1.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.javascript;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "build_rga_indexes", description = "Create index for sample RGA status #1693", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVASCRIPT, date = 20210528, deprecatedSince = "3.0.0")
+public class Migration1 extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration2.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration2.java
new file mode 100644
index 00000000000..a0c0938de73
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration2.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.javascript;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "init_userId_group_arrays", description = "Initialise all userIds arrays from groups #1735", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVASCRIPT, date = 20210528, deprecatedSince = "3.0.0")
+public class Migration2 extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration3.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration3.java
new file mode 100644
index 00000000000..9b21dcdbc9c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration3.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.javascript;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "init_ca_panel_arrays", description = "Initialise panels array in Clinical Analysis #1759", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVASCRIPT, date = 20210528, deprecatedSince = "3.0.0")
+public class Migration3 extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
\ No newline at end of file
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration4.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration4.java
new file mode 100644
index 00000000000..ef72a501f44
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/catalog/javascript/Migration4.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.catalog.javascript;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "update_qc_file_sample_fields", description = "Update QC fields from Sample and File #1730", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVASCRIPT, date = 20210531, patch = 4, deprecatedSince = "3.0.0")
+public class Migration4 extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/AddCellbaseConfigurationToProject.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/AddCellbaseConfigurationToProject.java
new file mode 100644
index 00000000000..5dac53d4688
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/AddCellbaseConfigurationToProject.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.storage;
+
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_cellbase_configuration_to_project", description = "Add cellbase configuration from storage-configuration.yml to project.internal.cellbase", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ patch = 3,
+ date = 20210616,
+ deprecatedSince = "3.0.0")
+public class AddCellbaseConfigurationToProject extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/DefaultSampleIndexConfiguration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/DefaultSampleIndexConfiguration.java
new file mode 100644
index 00000000000..7b33bd7d709
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/DefaultSampleIndexConfiguration.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.storage;
+
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "default_sample_index_configuration", description = "Add a default backward compatible sample index configuration", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ patch = 7,
+ date = 20210721,
+ deprecatedSince = "3.0.0") // Needs to run after StudyClinicalConfigurationRelocation
+public class DefaultSampleIndexConfiguration extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/NewClinicalSignificanceFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/NewClinicalSignificanceFields.java
new file mode 100644
index 00000000000..b4d243ee279
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_1_0/storage/NewClinicalSignificanceFields.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_1_0.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+
+@Migration(id = "new_clinical_significance_fields", description = "Add new clinical significance fields and combinations for variant storage and solr", version = "2.1.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ patch = 1,
+ date = 20210708,
+ deprecatedSince = "3.0.0")
+public class NewClinicalSignificanceFields extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddMissingClinicalAudit.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddMissingClinicalAudit.java
new file mode 100644
index 00000000000..7008388f42e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddMissingClinicalAudit.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_missing_create_interpretation_in_clinical_audit",
+ description = "Add missing CREATE_INTERPRETATION audits in ClinicalAnalysis", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211227, deprecatedSince = "3.0.0")
+public class AddMissingClinicalAudit extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNameFieldInCohort.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNameFieldInCohort.java
new file mode 100644
index 00000000000..1f23c1b331c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNameFieldInCohort.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_name_field_in_cohort_1902",
+ description = "Add new name field to Cohort #1902", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220228, deprecatedSince = "3.0.0")
+public class AddNameFieldInCohort extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewAllowedBiotype.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewAllowedBiotype.java
new file mode 100644
index 00000000000..1aa51b53014
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewAllowedBiotype.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_new_allowed_biotype",
+ description = "Add new allowed biotype 'guide_RNA', #1856", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 2,
+ date = 20211209, deprecatedSince = "3.0.0")
+public class AddNewAllowedBiotype extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewFileInternalIndex_1850.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewFileInternalIndex_1850.java
new file mode 100644
index 00000000000..099dd960790
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddNewFileInternalIndex_1850.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "new_file_internal_index_1850",
+ description = "Add new FileInternalVariant and FileInternalAlignment index #1850", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211127, deprecatedSince = "3.0.0")
+public class AddNewFileInternalIndex_1850 extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddSampleInternalVariant_1851.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddSampleInternalVariant_1851.java
new file mode 100644
index 00000000000..21218e3222d
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/AddSampleInternalVariant_1851.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_sample_internal_variant_1851",
+ description = "Add new SampleInternalVariant #1851", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211129, deprecatedSince = "3.0.0")
+public class AddSampleInternalVariant_1851 extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ChangeInterpretationMethods.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ChangeInterpretationMethods.java
new file mode 100644
index 00000000000..7731a4510fe
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ChangeInterpretationMethods.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "change_interpretation_method",
+ description = "Remove list of methods from Interpretations #1841", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211112, deprecatedSince = "3.0.0")
+public class ChangeInterpretationMethods extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ClinicalVariantEvidenceMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ClinicalVariantEvidenceMigration.java
new file mode 100644
index 00000000000..6de2592fbaa
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ClinicalVariantEvidenceMigration.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_clinical_variant_evidence_review",
+ description = "Add new ClinicalVariantEvidenceReview object, #1874", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220112, deprecatedSince = "3.0.0")
+public class ClinicalVariantEvidenceMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/DeleteUnusedVariableSets.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/DeleteUnusedVariableSets.java
new file mode 100644
index 00000000000..7ddea73508c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/DeleteUnusedVariableSets.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "delete_unused_variablesets",
+ description = "Delete unused VariableSets, #1859", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 2,
+ date = 20211210, deprecatedSince = "3.0.0")
+public class DeleteUnusedVariableSets extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixFamilyReferences.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixFamilyReferences.java
new file mode 100644
index 00000000000..fd160750475
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixFamilyReferences.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "fix_family_references_in_individual",
+ description = "Fix Family references, #TASK-489", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220324, deprecatedSince = "3.0.0")
+public class FixFamilyReferences extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixNonExistingMoIFromPanels.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixNonExistingMoIFromPanels.java
new file mode 100644
index 00000000000..d642d8499af
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/FixNonExistingMoIFromPanels.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "fix_non_existing_mois_from_panels",
+ description = "Remove non-existing MOIs from Panels", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 2,
+ date = 20220111, deprecatedSince = "3.0.0")
+public class FixNonExistingMoIFromPanels extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveClinicalAnalysisQualityControl.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveClinicalAnalysisQualityControl.java
new file mode 100644
index 00000000000..b7ff196615b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveClinicalAnalysisQualityControl.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "improve_ca_quality_control",
+ description = "Quality control normalize comments and fields #1826", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211001, deprecatedSince = "3.0.0")
+public class ImproveClinicalAnalysisQualityControl extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveFileQualityControl.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveFileQualityControl.java
new file mode 100644
index 00000000000..16043d38b26
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveFileQualityControl.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "improve_file_quality_control",
+ description = "Quality control normalize comments and fields #1826", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211001, deprecatedSince = "3.0.0")
+public class ImproveFileQualityControl extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveIndividualQualityControl.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveIndividualQualityControl.java
new file mode 100644
index 00000000000..b3350e099f3
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveIndividualQualityControl.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "improve_individual_quality_control",
+ description = "Quality control normalize comments and fields #1826", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211001, deprecatedSince = "3.0.0")
+public class ImproveIndividualQualityControl extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveVariableSetNamesAndDescriptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveVariableSetNamesAndDescriptions.java
new file mode 100644
index 00000000000..39b2df0d2a2
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/ImproveVariableSetNamesAndDescriptions.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "improveVariableSetNamesAndDescriptions",
+ description = "Improve VariableSet names and descriptions", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211210)
+public class ImproveVariableSetNamesAndDescriptions extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveFileDocsFromCA.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveFileDocsFromCA.java
new file mode 100644
index 00000000000..af85465d69e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveFileDocsFromCA.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "remove_file_docs_from_clinical_analyses",
+ description = "Store references of File in Clinical Analysis and not full File documents #1837", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211102, deprecatedSince = "3.0.0")
+public class RemoveFileDocsFromCA extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveParallelIndexes.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveParallelIndexes.java
new file mode 100644
index 00000000000..7b00543f9a5
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RemoveParallelIndexes.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "remove_parallel_indexes",
+ description = "Remove parallel array indexes #CU-20jc4tx", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220310, deprecatedSince = "3.0.0")
+public class RemoveParallelIndexes extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFamilyQualityControlFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFamilyQualityControlFields.java
new file mode 100644
index 00000000000..821fb020a28
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFamilyQualityControlFields.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_family_quality_control_fields",
+ description = "Rename FamilyQualityControl fields #1844", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211119, deprecatedSince = "3.0.0")
+public class RenameFamilyQualityControlFields extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFileQualityControlFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFileQualityControlFields.java
new file mode 100644
index 00000000000..c3c5d4ff7f8
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameFileQualityControlFields.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_file_quality_control_fields",
+ description = "Rename FileQualityControl fields #1844", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211119, deprecatedSince = "3.0.0")
+public class RenameFileQualityControlFields extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameIndividualQualityControlFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameIndividualQualityControlFields.java
new file mode 100644
index 00000000000..6df5fc82131
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameIndividualQualityControlFields.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_individual_quality_control_fields",
+ description = "Rename IndividualQualityControl fields #1844", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211119, deprecatedSince = "3.0.0")
+public class RenameIndividualQualityControlFields extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameInterpretationFindingStats.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameInterpretationFindingStats.java
new file mode 100644
index 00000000000..bd4ad966774
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameInterpretationFindingStats.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_interpretation_stats_field",
+ description = "Rename interpretation stats field #1819", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211115, deprecatedSince = "3.0.0")
+public class RenameInterpretationFindingStats extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameSampleQualityControlFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameSampleQualityControlFields.java
new file mode 100644
index 00000000000..0c5b36cdf93
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/RenameSampleQualityControlFields.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_sample_quality_control_fields",
+ description = "Rename SampleQualityControl fields #1844", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 2,
+ date = 20211119, deprecatedSince = "3.0.0")
+public class RenameSampleQualityControlFields extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addDefaultVariantCallerInterpretationStudyConfiguration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addDefaultVariantCallerInterpretationStudyConfiguration.java
new file mode 100644
index 00000000000..9a43d99ac53
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addDefaultVariantCallerInterpretationStudyConfiguration.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_variant_caller_interpretation_configuration",
+ description = "Add default variant caller Interpretation Study configuration #1822", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20210916, deprecatedSince = "3.0.0")
+public class addDefaultVariantCallerInterpretationStudyConfiguration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddInternalLastModified.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddInternalLastModified.java
new file mode 100644
index 00000000000..28e32235bb0
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddInternalLastModified.java
@@ -0,0 +1,10 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+public abstract class AddInternalLastModified extends MigrationTool {
+
+ protected void addInternalModificationDate(String collection) {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToClinicalInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToClinicalInternal.java
new file mode 100644
index 00000000000..c127e7b2695
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToClinicalInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_clinical.internal", description = "Add internal modificationDate to Clinical #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToClinicalInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToCohortInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToCohortInternal.java
new file mode 100644
index 00000000000..0aaccf98b74
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToCohortInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_cohort.internal", description = "Add internal modificationDate to Cohort #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToCohortInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFamilyInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFamilyInternal.java
new file mode 100644
index 00000000000..914b6351a0c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFamilyInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_family.internal", description = "Add internal modificationDate to Family #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToFamilyInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFileInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFileInternal.java
new file mode 100644
index 00000000000..7ffc3cf7f37
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToFileInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_file.internal", description = "Add internal modificationDate to File #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToFileInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToIndividualInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToIndividualInternal.java
new file mode 100644
index 00000000000..05ca7bc522d
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToIndividualInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_individual.internal", description = "Add internal modificationDate to Individual #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToIndividualInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToInterpretationInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToInterpretationInternal.java
new file mode 100644
index 00000000000..9340231dfde
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToInterpretationInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_interpretation.internal", description = "Add internal modificationDate to Interpretation #1810",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToInterpretationInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToJobInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToJobInternal.java
new file mode 100644
index 00000000000..543e02f328e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToJobInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_job.internal", description = "Add internal modificationDate to Job #1810", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToJobInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToProjectInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToProjectInternal.java
new file mode 100644
index 00000000000..82a3142a222
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToProjectInternal.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_modificationDate_to_project.internal", description = "Add internal modificationDate to Project #1810", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToProjectInternal extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToSampleInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToSampleInternal.java
new file mode 100644
index 00000000000..875bbaa26a7
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToSampleInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_sample.internal", description = "Add internal modificationDate to Sample #1810", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToSampleInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToStudyInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToStudyInternal.java
new file mode 100644
index 00000000000..987a742cb5d
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInternalLastModified/AddModificationDateToStudyInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addInternalLastModified;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_modificationDate_to_study.internal", description = "Add internal modificationDate to Study #1810", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210812, deprecatedSince = "3.0.0")
+public class AddModificationDateToStudyInternal extends AddInternalLastModified {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInterpretationStats.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInterpretationStats.java
new file mode 100644
index 00000000000..ac1c112d0a1
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addInterpretationStats.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_interpretation_stats",
+ description = "Add interpretation stats #1819", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 2,
+ date = 20210908, deprecatedSince = "3.0.0")
+public class addInterpretationStats extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDate.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDate.java
new file mode 100644
index 00000000000..efd1107ba7b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDate.java
@@ -0,0 +1,10 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+public abstract class AddRegistrationDate extends MigrationTool {
+
+ protected void addRegistrationDate(String collection) {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToClinicalInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToClinicalInternal.java
new file mode 100644
index 00000000000..14a48ed90be
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToClinicalInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_clinical.internal", description = "Add registrationDate to Clinical #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToClinicalInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToCohortInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToCohortInternal.java
new file mode 100644
index 00000000000..a7dcf145b33
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToCohortInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_cohort.internal", description = "Add registrationDate to Cohort #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToCohortInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFamilyInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFamilyInternal.java
new file mode 100644
index 00000000000..66f375ce955
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFamilyInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_family.internal", description = "Add registrationDate to Family #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToFamilyInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFileInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFileInternal.java
new file mode 100644
index 00000000000..cfa29de842a
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToFileInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_file.internal", description = "Add registrationDate to File #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToFileInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToIndividualInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToIndividualInternal.java
new file mode 100644
index 00000000000..58d233f6d7f
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToIndividualInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_individual.internal", description = "Add registrationDate to Individual #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToIndividualInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToInterpretationInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToInterpretationInternal.java
new file mode 100644
index 00000000000..115b4e4fc6c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToInterpretationInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_interpretation.internal", description = "Add registrationDate to Interpretation #1804",
+ version = "2.2.0", language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToInterpretationInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToJobInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToJobInternal.java
new file mode 100644
index 00000000000..c56124cdda6
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToJobInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_job.internal", description = "Add registrationDate to Job #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToJobInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToProjectInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToProjectInternal.java
new file mode 100644
index 00000000000..ae3f65b70d9
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToProjectInternal.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_registrationDate_to_project.internal", description = "Add registrationDate to Project #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToProjectInternal extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToSampleInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToSampleInternal.java
new file mode 100644
index 00000000000..e317c667a98
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToSampleInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_sample.internal", description = "Add registrationDate to Sample #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToSampleInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToStudyInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToStudyInternal.java
new file mode 100644
index 00000000000..7d036f65bc4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRegistrationDate/AddRegistrationDateToStudyInternal.java
@@ -0,0 +1,13 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.addRegistrationDate;
+
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_registrationDate_to_study.internal", description = "Add registrationDate to Study #1804", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG,
+ date = 20210720, deprecatedSince = "3.0.0")
+public class AddRegistrationDateToStudyInternal extends AddRegistrationDate {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRgaIndexToStudyInternal.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRgaIndexToStudyInternal.java
new file mode 100644
index 00000000000..d995f4ba97f
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/addRgaIndexToStudyInternal.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_rga_index_summary_to_study_internal",
+ description = "Add RGA Index information to Study Internal #", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ patch = 1,
+ date = 20210719, deprecatedSince = "3.0.0")
+public class addRgaIndexToStudyInternal extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1795/AddFamilyIdsInIndividual.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1795/AddFamilyIdsInIndividual.java
new file mode 100644
index 00000000000..25e93347812
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1795/AddFamilyIdsInIndividual.java
@@ -0,0 +1,15 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1795;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_familyIds_in_individual", description = "Add new list of familyIds in Individual #1795", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, date = 20210630, deprecatedSince = "3.0.0")
+public class AddFamilyIdsInIndividual extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
+
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1796/AddCohortIdsInSample.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1796/AddCohortIdsInSample.java
new file mode 100644
index 00000000000..b6d1d3ff298
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1796/AddCohortIdsInSample.java
@@ -0,0 +1,15 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1796;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationException;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_cohortIds_in_sample", description = "Add new list of cohortIds in Sample #1796", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA, date = 20210706, deprecatedSince = "3.0.0")
+public class AddCohortIdsInSample extends MigrationTool {
+
+ @Override
+ protected void run() throws MigrationException {
+ }
+}
+
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteClinicalStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteClinicalStatusDataModel.java
new file mode 100644
index 00000000000..fcb2313cb39
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteClinicalStatusDataModel.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_clinical_status_models",
+ description = "Complete Clinical Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126,
+ deprecatedSince = "3.0.0")
+public class CompleteClinicalStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteCohortStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteCohortStatusDataModel.java
new file mode 100644
index 00000000000..692e58cc397
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteCohortStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_cohort_status_models",
+ description = "Complete Cohort Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteCohortStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFamilyStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFamilyStatusDataModel.java
new file mode 100644
index 00000000000..5c1bfbfc2aa
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFamilyStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_family_status_models",
+ description = "Complete Family Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteFamilyStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFileStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFileStatusDataModel.java
new file mode 100644
index 00000000000..c1c84058b5c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteFileStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_file_status_models",
+ description = "Complete File Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteFileStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteIndividualStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteIndividualStatusDataModel.java
new file mode 100644
index 00000000000..cb7fda578ca
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteIndividualStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_individual_status_models",
+ description = "Complete Individual Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteIndividualStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteInterpretationStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteInterpretationStatusDataModel.java
new file mode 100644
index 00000000000..dad8a984810
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteInterpretationStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_interpretation_status_models",
+ description = "Complete Interpretation Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteInterpretationStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteJobStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteJobStatusDataModel.java
new file mode 100644
index 00000000000..4a08d4695e7
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteJobStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_job_status_models",
+ description = "Complete Job Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteJobStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompletePanelStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompletePanelStatusDataModel.java
new file mode 100644
index 00000000000..8311dcc2153
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompletePanelStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_panel_status_models",
+ description = "Complete Panel Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompletePanelStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteProjectStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteProjectStatusDataModel.java
new file mode 100644
index 00000000000..09ce8a4fc88
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteProjectStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_project_status_models",
+ description = "Complete Project Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteProjectStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteSampleStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteSampleStatusDataModel.java
new file mode 100644
index 00000000000..bb9b3e54086
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteSampleStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_sample_status_models",
+ description = "Complete Sample Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteSampleStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteStudyStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteStudyStatusDataModel.java
new file mode 100644
index 00000000000..8b119d92cc4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteStudyStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_study_status_models",
+ description = "Complete Study Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteStudyStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteUserStatusDataModel.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteUserStatusDataModel.java
new file mode 100644
index 00000000000..937e6d3f9fb
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issue_1849/CompleteUserStatusDataModel.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issue_1849;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "complete_user_status_models",
+ description = "Complete User Status data models #1849", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211126, deprecatedSince = "3.0.0")
+public class CompleteUserStatusDataModel extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/IndividualOntologyTermMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/IndividualOntologyTermMigration.java
new file mode 100644
index 00000000000..9a5eb6cec84
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/IndividualOntologyTermMigration.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issues_1853_1855;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "individual_ontology_term_migration_#1853",
+ description = "Change sex and ethnicity types for OntologyTermAnnotation #1855", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211203, deprecatedSince = "3.0.0")
+public class IndividualOntologyTermMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/NewStudyDataModelFields.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/NewStudyDataModelFields.java
new file mode 100644
index 00000000000..e6659fb4ad7
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/NewStudyDataModelFields.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issues_1853_1855;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "new_study_data_model_fields_#1853",
+ description = "New Study 'sources', 'type' and 'additionalInfo' fields #1853", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211202, deprecatedSince = "3.0.0")
+public class NewStudyDataModelFields extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/SampleProcessingAndCollectionChanges.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/SampleProcessingAndCollectionChanges.java
new file mode 100644
index 00000000000..a054a6a0566
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/issues_1853_1855/SampleProcessingAndCollectionChanges.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog.issues_1853_1855;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "sample_source_treatments_#1854",
+ description = "Sample source, treatments, processing and collection changes #1854", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20211201, patch = 2, deprecatedSince = "3.0.0")
+public class SampleProcessingAndCollectionChanges extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/renameVariableSetFieldFromVariable.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/renameVariableSetFieldFromVariable.java
new file mode 100644
index 00000000000..bd3f00937e9
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/catalog/renameVariableSetFieldFromVariable.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.catalog;
+
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_variableset_field",
+ description = "Rename Variable variableSet field to variables #1823", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20210920, deprecatedSince = "3.0.0")
+public class renameVariableSetFieldFromVariable extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/SynchronizeCatalogStorage.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/SynchronizeCatalogStorage.java
new file mode 100644
index 00000000000..609d50c915a
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/SynchronizeCatalogStorage.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "synchronize_catalog_storage_1850_1851",
+ description = "Synchronize catalog storage #1850 #1851", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ date = 20220118, deprecatedSince = "3.0.0")
+public class SynchronizeCatalogStorage extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/UpdateSampleIndexStatus.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/UpdateSampleIndexStatus.java
new file mode 100644
index 00000000000..2965c326760
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_0/storage/UpdateSampleIndexStatus.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_0.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "update_sample_index_status_1901",
+ description = " Improve sample-index multi-schema management. #1901", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ date = 20220302, deprecatedSince = "3.0.0")
+public class UpdateSampleIndexStatus extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddMissingBiotypes.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddMissingBiotypes.java
new file mode 100644
index 00000000000..7173a402e96
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddMissingBiotypes.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_1.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_missing_biotypes",
+ description = "Add missing biotypes, #TASK-625", version = "2.2.1",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220412, deprecatedSince = "3.0.0")
+public class AddMissingBiotypes extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddPanelGeneNameIndex.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddPanelGeneNameIndex.java
new file mode 100644
index 00000000000..0cd9ba5ff1b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/AddPanelGeneNameIndex.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_1.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_panel_gene_name_index",
+ description = "Add Panel gene.name index #TASK-602", version = "2.2.1",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220406, deprecatedSince = "3.0.0")
+public class AddPanelGeneNameIndex extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/InitSharedProjectField.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/InitSharedProjectField.java
new file mode 100644
index 00000000000..49b4b252f60
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/catalog/InitSharedProjectField.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_1.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "init_shared_project",
+ description = "Initialise sharedProjects #TASK-702", version = "2.2.1",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220502, deprecatedSince = "3.0.0")
+public class InitSharedProjectField extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/storage/SampleIndexConfigurationAddMissingStatus.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/storage/SampleIndexConfigurationAddMissingStatus.java
new file mode 100644
index 00000000000..cd11e50f8aa
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_2_1/storage/SampleIndexConfigurationAddMissingStatus.java
@@ -0,0 +1,15 @@
+package org.opencb.opencga.app.migrations.v2.v2_2_1.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "sample_index_configuration_add_missing_status",
+ description = "Sample index configuration add missing status #TASK-512", version = "2.2.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ date = 20220328, deprecatedSince = "3.0.0")
+public class SampleIndexConfigurationAddMissingStatus extends StorageMigrationTool {
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddLockedToInterpretation.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddLockedToInterpretation.java
new file mode 100644
index 00000000000..52a95ccf66e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddLockedToInterpretation.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_locked_to_interpretation_TASK-552",
+ description = "Add new 'locked' field to Interpretation #TASK-552", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220401,
+ deprecatedSince = "3.0.0")
+public class AddLockedToInterpretation extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddPanelInternalField.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddPanelInternalField.java
new file mode 100644
index 00000000000..e2edbf68060
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AddPanelInternalField.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_panel_internal_field-TASK_734",
+ description = "Add 'internal' to Panel data model #TASK-734", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220509,
+ deprecatedSince = "3.0.0")
+public class AddPanelInternalField extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AutoIncrementVersion.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AutoIncrementVersion.java
new file mode 100644
index 00000000000..8cbd5a59eef
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/AutoIncrementVersion.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "autoincrement_version_TASK-323",
+ description = "Reorganise data in new collections (autoincrement version) #TASK-323", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ offline = true,
+ date = 20220512,
+ deprecatedSince = "3.0.0")
+public class AutoIncrementVersion extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/InitSampleIndexConfiguration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/InitSampleIndexConfiguration.java
new file mode 100644
index 00000000000..81d3f1e8628
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/InitSampleIndexConfiguration.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "init_sampleIndexConfiguration-TASK550",
+ description = "Initialise SampleIndexConfiguration in Study internal #TASK-550", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220502,
+ deprecatedSince = "3.0.0")
+public class InitSampleIndexConfiguration extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/MoveCellbaseFromProjectInternalToProject.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/MoveCellbaseFromProjectInternalToProject.java
new file mode 100644
index 00000000000..9f4f30213fb
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/MoveCellbaseFromProjectInternalToProject.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "move_cellbase_from_project_internal_to_project_TASK-354",
+ description = "Move cellbase from project.internal to project #TASK-354", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220422,
+ deprecatedSince = "3.0.0")
+
+public class MoveCellbaseFromProjectInternalToProject extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeletedCollections.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeletedCollections.java
new file mode 100644
index 00000000000..2a1532c6da4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeletedCollections.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_deleted_collections_TASK-359",
+ description = "Rename deleted collections #TASK-359", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220502,
+ deprecatedSince = "3.0.0")
+public class RenameDeletedCollections extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeprecatedVariantStorageToolId.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeprecatedVariantStorageToolId.java
new file mode 100644
index 00000000000..b39a56cdbec
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/RenameDeprecatedVariantStorageToolId.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_variant_storage_tool_ids_TASK-705",
+ description = "Rename variant storage tool ids #TASK-705", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220506,
+ deprecatedSince = "3.0.0")
+public class RenameDeprecatedVariantStorageToolId extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/UpdateJWTSecretKey.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/UpdateJWTSecretKey.java
new file mode 100644
index 00000000000..be328bbeb6a
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/catalog/UpdateJWTSecretKey.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "update_jwt_secret_key_TASK-807",
+ description = "Update JWT secret key #TASK-807", version = "2.3.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220513,
+ deprecatedSince = "3.0.0")
+public class UpdateJWTSecretKey extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/storage/AddMissingColumnsToPhoenix.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/storage/AddMissingColumnsToPhoenix.java
new file mode 100644
index 00000000000..df2e308a727
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_0/storage/AddMissingColumnsToPhoenix.java
@@ -0,0 +1,14 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_0.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id="add_missing_columns_to_phoenix_TASK-789", description = "Add missing 1000G columns to phoenix #TASK-789",
+ version = "2.3.0", domain = Migration.MigrationDomain.STORAGE, date = 20220614, deprecatedSince = "3.0.0"
+)
+public class AddMissingColumnsToPhoenix extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_1/catalog/MoveCellbaseFromProjectInternalToProjectBugFix.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_1/catalog/MoveCellbaseFromProjectInternalToProjectBugFix.java
new file mode 100644
index 00000000000..2c645980391
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_3_1/catalog/MoveCellbaseFromProjectInternalToProjectBugFix.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_3_1.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "bugfix_move_cellbase_from_project_internal_to_project_TASK-1100",
+ description = "Bugfix: Move cellbase from project.internal to project #TASK-1100", version = "2.3.1",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220620,
+ deprecatedSince = "3.0.0")
+
+public class MoveCellbaseFromProjectInternalToProjectBugFix extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddClinicalStatusType_607.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddClinicalStatusType_607.java
new file mode 100644
index 00000000000..8f3886c50e8
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddClinicalStatusType_607.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_clinical_status_type_TASK-607",
+ description = "Automatically close cases depending on the new clinical status type #TASK-607", version = "2.4.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220610,
+ deprecatedSince = "3.0.0")
+public class AddClinicalStatusType_607 extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddPrivateDueDate_803.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddPrivateDueDate_803.java
new file mode 100644
index 00000000000..6dcab05694a
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/AddPrivateDueDate_803.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_private_dueDate_TASK-803",
+ description = "Add private _dueDate to ClinicalAnalysis #TASK-803", version = "2.4.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220530,
+ deprecatedSince = "3.0.0")
+public class AddPrivateDueDate_803 extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/IndexPanelSource.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/IndexPanelSource.java
new file mode 100644
index 00000000000..af93d04de7d
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_0/catalog/IndexPanelSource.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "index_panel_source_TASK-473",
+ description = "Index panel source #TASK-473", version = "2.4.0",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220530,
+ deprecatedSince = "3.0.0")
+public class IndexPanelSource extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_10/catalog/AddMissingEndDateOnFinishedJobs.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_10/catalog/AddMissingEndDateOnFinishedJobs.java
new file mode 100644
index 00000000000..0759d4c7bf1
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_10/catalog/AddMissingEndDateOnFinishedJobs.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_10.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_missing_endDate_on_finished_jobs" ,
+ description = "Add missing end date on finished jobs",
+ version = "2.4.10",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20221026,
+ deprecatedSince = "3.0.0"
+)
+public class AddMissingEndDateOnFinishedJobs extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/SynchronizeCatalogStorageStatuses.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/SynchronizeCatalogStorageStatuses.java
new file mode 100644
index 00000000000..e2fb99933cf
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/SynchronizeCatalogStorageStatuses.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_11;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "synchronize_catalog_storage_statuses",
+ description = "Synchronize catalog internal statuses from storage, #TASK-1304", version = "2.4.11",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ date = 20221117,
+ deprecatedSince = "3.0.0")
+public class SynchronizeCatalogStorageStatuses extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/catalog/SignatureFittingsMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/catalog/SignatureFittingsMigration.java
new file mode 100644
index 00000000000..ec0b49baae3
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_11/catalog/SignatureFittingsMigration.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_11.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "signature_fittings" ,
+ description = "Replace fitting for fittings in Signature",
+ version = "2.4.11",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20221109,
+ deprecatedSince = "3.0.0"
+)
+public class SignatureFittingsMigration extends MigrationTool {
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/AddClinicalDiscussion.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/AddClinicalDiscussion.java
new file mode 100644
index 00000000000..8e5825e3de7
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/AddClinicalDiscussion.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_2.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "add_clinical_discussion_TASK-1472",
+ description = "Add ClinicalDiscussion #TASK-1472", version = "2.4.2",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220727,
+ deprecatedSince = "3.0.0")
+public class AddClinicalDiscussion extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/RecoverProbandSamplesInCases.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/RecoverProbandSamplesInCases.java
new file mode 100644
index 00000000000..aba0267d65b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_2/catalog/RecoverProbandSamplesInCases.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_2.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "recover_proband_samples_in_cases_TASK-1470",
+ description = "Recover lost samples in clinical collection #TASK-1470", version = "2.4.2",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220725,
+ patch = 2,
+ deprecatedSince = "3.0.0")
+public class RecoverProbandSamplesInCases extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/MigrateToClinicalAcmg.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/MigrateToClinicalAcmg.java
new file mode 100644
index 00000000000..7951810b105
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/MigrateToClinicalAcmg.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_3.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "migrate_to_clinical_acmg_TASK-1194",
+ description = "Migrate to ClinicalAcmg #TASK-1194", version = "2.4.3",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220809,
+ deprecatedSince = "3.0.0")
+public class MigrateToClinicalAcmg extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/ShortenIndexedFieldVariables.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/ShortenIndexedFieldVariables.java
new file mode 100644
index 00000000000..2d4e2cb14a8
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_3/catalog/ShortenIndexedFieldVariables.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_3.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "shorten_indexed_field_variables-1386",
+ description = "Shorten indexed field variables #TASK-1386", version = "2.4.3",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220809,
+ deprecatedSince = "3.0.0")
+public class ShortenIndexedFieldVariables extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/AvoidCaseStatusIdNullMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/AvoidCaseStatusIdNullMigration.java
new file mode 100644
index 00000000000..e26df11c03c
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/AvoidCaseStatusIdNullMigration.java
@@ -0,0 +1,18 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_4.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "avoidCaseStatusIdNull-1938",
+ description = "Avoid nullable status id in Clinical Analysis #TASK-1938", version = "2.4.4",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220914,
+ deprecatedSince = "3.0.0")
+public class AvoidCaseStatusIdNullMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/RemoveBiotypeAllowedKeysMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/RemoveBiotypeAllowedKeysMigration.java
new file mode 100644
index 00000000000..07a19a12fdb
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/catalog/RemoveBiotypeAllowedKeysMigration.java
@@ -0,0 +1,17 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_4.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "remove_biotype_allowed_keys_TASK-1849",
+ description = "Remove biotype and consequence type allowed keys from variable sets #TASK-1849", version = "2.4.4",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.CATALOG,
+ date = 20220905,
+ deprecatedSince = "3.0.0")
+public class RemoveBiotypeAllowedKeysMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/storage/InvalidateVariantArchivesMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/storage/InvalidateVariantArchivesMigration.java
new file mode 100644
index 00000000000..069e1a86e6e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_4_4/storage/InvalidateVariantArchivesMigration.java
@@ -0,0 +1,16 @@
+package org.opencb.opencga.app.migrations.v2.v2_4_4.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "invalidate_variant_archives_migration-633",
+ description = "Invalidate variant archives from variant storage hadoop #TASK-633", version = "2.4.4",
+ language = Migration.MigrationLanguage.JAVA,
+ domain = Migration.MigrationDomain.STORAGE,
+ date = 20220825,
+ deprecatedSince = "3.0.0")
+public class InvalidateVariantArchivesMigration extends StorageMigrationTool {
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_6_0/storage/AddCellbaseDataRelease.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_6_0/storage/AddCellbaseDataRelease.java
new file mode 100644
index 00000000000..06f1d871a80
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_6_0/storage/AddCellbaseDataRelease.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_6_0.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "add_cellbase_data_release" ,
+ description = "Add default cellbase data release if missing",
+ version = "2.6.0",
+ domain = Migration.MigrationDomain.STORAGE,
+ language = Migration.MigrationLanguage.JAVA,
+ patch = 2,
+ date = 20230104,
+ deprecatedSince = "3.0.0"
+)
+public class AddCellbaseDataRelease extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_7_0/catalog/CancerRoleAndModeOfInheritanceMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_7_0/catalog/CancerRoleAndModeOfInheritanceMigration.java
new file mode 100644
index 00000000000..ce425e3434b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_7_0/catalog/CancerRoleAndModeOfInheritanceMigration.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_7_0.catalog;
+
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "panel_roles_and_modesOfInheritance" ,
+ description = "Change panel cancer.role and modeOfInheritance for cancer.roles[] and modesOfInheritance[]",
+ version = "2.7.0",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20230117,
+ deprecatedSince = "3.0.0"
+)
+public class CancerRoleAndModeOfInheritanceMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_0/catalog/CalculatePedigreeGraphMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_0/catalog/CalculatePedigreeGraphMigration.java
new file mode 100644
index 00000000000..0be802202c4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_0/catalog/CalculatePedigreeGraphMigration.java
@@ -0,0 +1,19 @@
+package org.opencb.opencga.app.migrations.v2.v2_8_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "calculate_pedigree_graph" ,
+ description = "Calculate Pedigree Graph for all the families",
+ version = "2.8.0",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20230313,
+ deprecatedSince = "3.0.0"
+)
+public class CalculatePedigreeGraphMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_6/storage/MarkUnknownLargestVariantLength.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_6/storage/MarkUnknownLargestVariantLength.java
new file mode 100644
index 00000000000..e3b093906c4
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_8_6/storage/MarkUnknownLargestVariantLength.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_8_6.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+
+@Migration(id = "mark_unknown_largest_variant_length" ,
+ description = "Mark as unknown largest variant length",
+ version = "2.8.6",
+ domain = Migration.MigrationDomain.STORAGE,
+ language = Migration.MigrationLanguage.JAVA,
+ patch = 1,
+ date = 20230927,
+ deprecatedSince = "3.0.0"
+)
+public class MarkUnknownLargestVariantLength extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java
new file mode 100644
index 00000000000..7dbd590c27e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java
@@ -0,0 +1,20 @@
+package org.opencb.opencga.app.migrations.v2.v2_9_0.catalog;
+
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+@Migration(id = "rename_cellbase_token_2_api_key" ,
+ description = "Rename CellBase Token to ApiKey",
+ version = "2.9.0",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20230829,
+ deprecatedSince = "3.0.0"
+)
+public class RenameCellBaseToken2ApiKey extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_4/catalog/FixStatusIndexesMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_4/catalog/FixStatusIndexesMigration.java
new file mode 100644
index 00000000000..ae73bcdc578
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_4/catalog/FixStatusIndexesMigration.java
@@ -0,0 +1,46 @@
+package org.opencb.opencga.app.migrations.v2_12_4.catalog;
+
+import org.bson.Document;
+import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+import java.util.Arrays;
+
+@Migration(id = "fix_status_indexes" ,
+ description = "Replace 'status.name' indexes for 'status.id'",
+ version = "2.12.4",
+ domain = Migration.MigrationDomain.CATALOG,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20240328
+)
+public class FixStatusIndexesMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ Document statusIndex = new Document()
+ .append("status.name", 1)
+ .append("studyUid", 1);
+ dropIndex(Arrays.asList(OrganizationMongoDBAdaptorFactory.JOB_COLLECTION, OrganizationMongoDBAdaptorFactory.FILE_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.SAMPLE_COLLECTION, OrganizationMongoDBAdaptorFactory.SAMPLE_ARCHIVE_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.COHORT_COLLECTION, OrganizationMongoDBAdaptorFactory.INDIVIDUAL_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.INDIVIDUAL_ARCHIVE_COLLECTION, OrganizationMongoDBAdaptorFactory.FAMILY_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.FAMILY_ARCHIVE_COLLECTION, OrganizationMongoDBAdaptorFactory.PANEL_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.PANEL_ARCHIVE_COLLECTION), statusIndex);
+
+ Document internalStatusIndex = new Document()
+ .append("internal.status.name", 1)
+ .append("studyUid", 1);
+ dropIndex(Arrays.asList(OrganizationMongoDBAdaptorFactory.JOB_COLLECTION, OrganizationMongoDBAdaptorFactory.FILE_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.SAMPLE_COLLECTION, OrganizationMongoDBAdaptorFactory.SAMPLE_ARCHIVE_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.COHORT_COLLECTION, OrganizationMongoDBAdaptorFactory.INDIVIDUAL_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.INDIVIDUAL_ARCHIVE_COLLECTION, OrganizationMongoDBAdaptorFactory.FAMILY_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.FAMILY_ARCHIVE_COLLECTION, OrganizationMongoDBAdaptorFactory.PANEL_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.PANEL_ARCHIVE_COLLECTION, OrganizationMongoDBAdaptorFactory.CLINICAL_ANALYSIS_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.INTERPRETATION_COLLECTION, OrganizationMongoDBAdaptorFactory.INTERPRETATION_ARCHIVE_COLLECTION),
+ internalStatusIndex);
+
+ catalogManager.installIndexes(token);
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/AddAllelesColumnToPhoenix.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/AddAllelesColumnToPhoenix.java
new file mode 100644
index 00000000000..4efa260d965
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/AddAllelesColumnToPhoenix.java
@@ -0,0 +1,27 @@
+package org.opencb.opencga.app.migrations.v2_12_5.storage;
+
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.storage.core.variant.VariantStorageEngine;
+
+@Migration(id="add_missing_column_to_phoenix_TASK-6005", description = "Add missing ALLELES column to phoenix #TASK-6005",
+ version = "2.12.5", domain = Migration.MigrationDomain.STORAGE, date = 20240510
+)
+public class AddAllelesColumnToPhoenix extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ for (String project : getVariantStorageProjects(organizationId)) {
+ VariantStorageEngine engine = getVariantStorageEngineByProject(project);
+ if (engine.getStorageEngineId().equals("hadoop")) {
+ logger.info("Adding missing columns (if any) for project " + project);
+ // Using same class for both migrations
+ Class> aClass = Class.forName("org.opencb.opencga.storage.hadoop.variant.migration.v2_3_0.AddMissingColumns");
+ Runnable runnable = (Runnable) aClass
+ .getConstructor(Object.class)
+ .newInstance(engine);
+ runnable.run();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/DetectIllegalConcurrentFileLoadingsMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/DetectIllegalConcurrentFileLoadingsMigration.java
new file mode 100644
index 00000000000..132e1357f1b
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_12_5/storage/DetectIllegalConcurrentFileLoadingsMigration.java
@@ -0,0 +1,360 @@
+package org.opencb.opencga.app.migrations.v2_12_5.storage;
+
+import org.opencb.commons.datastore.core.ObjectMap;
+import org.opencb.commons.datastore.core.Query;
+import org.opencb.commons.datastore.core.QueryOptions;
+import org.opencb.opencga.analysis.variant.metadata.CatalogStorageMetadataSynchronizer;
+import org.opencb.opencga.app.migrations.StorageMigrationTool;
+import org.opencb.opencga.catalog.db.api.FileDBAdaptor;
+import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.core.common.TimeUtils;
+import org.opencb.opencga.core.common.UriUtils;
+import org.opencb.opencga.core.models.common.IndexStatus;
+import org.opencb.opencga.core.models.file.File;
+import org.opencb.opencga.core.models.file.FileInternalVariantIndex;
+import org.opencb.opencga.core.models.file.FileUpdateParams;
+import org.opencb.opencga.core.models.file.VariantIndexStatus;
+import org.opencb.opencga.core.models.sample.SampleUpdateParams;
+import org.opencb.opencga.storage.core.exceptions.StorageEngineException;
+import org.opencb.opencga.storage.core.metadata.VariantStorageMetadataManager;
+import org.opencb.opencga.storage.core.metadata.models.FileMetadata;
+import org.opencb.opencga.storage.core.metadata.models.SampleMetadata;
+import org.opencb.opencga.storage.core.metadata.models.TaskMetadata;
+import org.opencb.opencga.storage.core.variant.VariantStorageEngine;
+import org.opencb.opencga.storage.core.variant.adaptors.GenotypeClass;
+import org.opencb.opencga.storage.core.variant.adaptors.VariantField;
+import org.opencb.opencga.storage.core.variant.adaptors.VariantQuery;
+
+import java.nio.file.Paths;
+import java.time.Instant;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Migration(id = "illegal_concurrent_file_loadings" ,
+ description = "Detect illegal concurrent file loadings and fix them by setting 'status' to 'INVALID' or 'READY'",
+ version = "2.12.5",
+ domain = Migration.MigrationDomain.STORAGE,
+ language = Migration.MigrationLanguage.JAVA,
+ date = 20240424
+)
+public class DetectIllegalConcurrentFileLoadingsMigration extends StorageMigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ for (String project : getVariantStorageProjects(organizationId)) {
+ VariantStorageEngine engine = getVariantStorageEngineByProject(project);
+ if (!engine.getStorageEngineId().equals("hadoop")) {
+ continue;
+ }
+ logger.info("Checking project '{}'", project);
+ for (String study : engine.getMetadataManager().getStudyNames()) {
+ checkStudy(engine, study);
+ }
+ }
+ }
+
+ private void checkStudy(VariantStorageEngine engine, String study) throws StorageEngineException, CatalogException {
+ VariantStorageMetadataManager metadataManager = engine.getMetadataManager();
+ boolean repeatMigration = params.getBoolean("repeat-migration");
+
+ logger.info("Checking study '{}'", study);
+ int studyId = metadataManager.getStudyId(study);
+
+ Set> fileSets = getFileWithSharedSamples(engine, studyId);
+ Set fileIds = fileSets.stream().flatMap(Collection::stream).collect(Collectors.toSet());
+
+ if (fileSets.isEmpty()) {
+ logger.info("No concurrent file loadings found in study '{}'", study);
+ return;
+ }
+
+ Map fileTasks = new HashMap<>();
+ for (TaskMetadata taskMetadata : metadataManager.taskIterable(studyId)) {
+ if (taskMetadata.getType() == TaskMetadata.Type.LOAD) {
+ for (Integer fileId : taskMetadata.getFileIds()) {
+ if (fileIds.contains(fileId)) {
+ TaskMetadata old = fileTasks.put(fileId, taskMetadata);
+ if (old != null) {
+ throw new IllegalStateException("File '" + fileId + "' is being loaded by more than one task."
+ + " Tasks '" + old.getName() + "'(" + old.getId() + ") and"
+ + " '" + taskMetadata.getName() + "'(" + taskMetadata.getId() + ")");
+ }
+ }
+ }
+ }
+ }
+
+ Set> fileSetsToInvalidate = new HashSet<>();
+ Set affectedFiles = new HashSet<>();
+ Set affectedSamples = new HashSet<>();
+ for (Set fileSet : fileSets) {
+ // Check if any task from this file set overlaps in time
+ List tasks = new ArrayList<>();
+ for (Integer fileId : fileSet) {
+ TaskMetadata task = fileTasks.get(fileId);
+ if (task != null) {
+ tasks.add(task);
+ }
+ }
+ if (tasks.size() > 1) {
+ logger.info("Found {} tasks loading files {}", tasks.size(), fileSet);
+ for (int i = 0; i < tasks.size(); i++) {
+ TaskMetadata task1 = tasks.get(i);
+ Date task1start = task1.getStatus().firstKey();
+ Date task1end = task1.getStatus().lastKey();
+ for (int f = i + 1; f < tasks.size(); f++) {
+ TaskMetadata task2 = tasks.get(f);
+ Date task2start = task2.getStatus().firstKey();
+ Date task2end = task2.getStatus().lastKey();
+ if (task1start.before(task2end) && task1end.after(task2start)) {
+ fileSetsToInvalidate.add(fileSet);
+ affectedFiles.addAll(task1.getFileIds());
+
+ List task1Files = task1.getFileIds().stream().map(fileId -> "'" + metadataManager.getFileName(studyId, fileId) + "'(" + fileId + ")").collect(Collectors.toList());
+ List task2Files = task2.getFileIds().stream().map(fileId -> "'" + metadataManager.getFileName(studyId, fileId) + "'(" + fileId + ")").collect(Collectors.toList());
+
+ logger.info("Tasks '{}'({}) and '{}'({}) overlap in time", task1.getName(), task1.getId(), task2.getName(), task2.getId());
+ logger.info("Task1: {} - {} loading files {}", task1start, task1end, task1Files);
+ logger.info("Task2: {} - {} loading files {}", task2start, task2end, task2Files);
+ Set task1Samples = task1.getFileIds().stream().flatMap(file -> metadataManager.getSampleIdsFromFileId(studyId, file).stream()).collect(Collectors.toSet());
+ Set task2Samples = task2.getFileIds().stream().flatMap(file -> metadataManager.getSampleIdsFromFileId(studyId, file).stream()).collect(Collectors.toSet());
+ for (Integer task1Sample : task1Samples) {
+ if (task2Samples.contains(task1Sample)) {
+ String sampleName = metadataManager.getSampleName(studyId, task1Sample);
+ affectedSamples.add(task1Sample);
+ logger.info("Sample '{}'({}) is shared between tasks", sampleName, task1Sample);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Set invalidFiles = new HashSet<>();
+ List invalidSampleIndexes = new ArrayList<>();
+ for (Integer sampleId : affectedSamples) {
+ String sampleName = metadataManager.getSampleName(studyId, sampleId);
+ SampleMetadata sampleMetadata = metadataManager.getSampleMetadata(studyId, sampleId);
+ if (!sampleMetadata.isMultiFileSample()) {
+ logger.warn("Sample '{}'({}) is not a multi-file sample but has multiple files loaded", sampleName, sampleId);
+ for (Integer file : sampleMetadata.getFiles()) {
+ if (metadataManager.isFileIndexed(studyId, file)) {
+ invalidFiles.add(file);
+ logger.info(" - Invalidating file '{}'({}). Must be deleted and then indexed.",
+ metadataManager.getFileName(studyId, file), file);
+ }
+ }
+ } else if (sampleMetadata.getSampleIndexStatus(Optional.of(sampleMetadata.getSampleIndexVersion()).orElse(-1)) == TaskMetadata.Status.READY) {
+ for (Integer fileId : sampleMetadata.getFiles()) {
+ if (affectedFiles.contains(fileId)) {
+ FileMetadata fileMetadata = metadataManager.getFileMetadata(studyId, fileId);
+ String fileName = fileMetadata.getName();
+
+ long actualCount = engine.get(new VariantQuery().study(study).sample(sampleName).file(fileName),
+ new QueryOptions(QueryOptions.INCLUDE, VariantField.ID).append(QueryOptions.COUNT, true))
+ .getNumMatches();
+
+ File catalogFile = catalogManager.getFileManager().search(study,
+ new Query(FileDBAdaptor.QueryParams.URI.key(), UriUtils.createUriSafe(fileMetadata.getPath())),
+ new QueryOptions(), token).first();
+ if (catalogFile == null) {
+ logger.warn("File '{}'({}) not found in catalog", fileName, fileId);
+ logger.warn("Sample '{}'({}) invalidated, as file '{}'({}) is not found in catalog", sampleName, sampleId, fileName, fileId);
+ logger.info(" - Invalidating sample index for sample '{}'({})", sampleName, sampleId);
+ invalidSampleIndexes.add(sampleId);
+ continue;
+ }
+ if (fileMetadata.getSamples().size() == 1 && catalogFile.getSampleIds().size() == 1) {
+ long expectedCount = 0;
+ for (Map.Entry entry : catalogFile.getQualityControl().getVariant()
+ .getVariantSetMetrics().getGenotypeCount().entrySet()) {
+ if (GenotypeClass.MAIN_ALT.test(entry.getKey())) {
+ expectedCount += entry.getValue();
+ }
+ }
+ if (expectedCount == 0) {
+ expectedCount = catalogFile.getQualityControl().getVariant().getVariantSetMetrics().getVariantCount();
+ }
+ if (expectedCount != actualCount) {
+ invalidSampleIndexes.add(sampleId);
+ logger.warn("Sample '{}'({}) was expected to have {} variants in the sample index of file '{}'({}) but has {}",
+ sampleName, sampleId, expectedCount, fileName, fileId, actualCount);
+ logger.info(" - Invalidating sample index for sample '{}'({})", sampleName, sampleId);
+ }
+ } else {
+ Map pipelineResult = (Map) catalogFile.getAttributes().get("storagePipelineResult");
+ long loadedVariants = ((Number) ((Map) pipelineResult.get("loadStats")).get("loadedVariants")).longValue();
+ if (loadedVariants != actualCount) {
+ invalidSampleIndexes.add(sampleId);
+ logger.warn("Sample '{}'({}) was expected to have {} variants in the sample index but has {}",
+ sampleName, sampleId, loadedVariants, actualCount);
+ logger.info(" - Invalidating sample index for sample '{}'({})", sampleName, sampleId);
+ }
+ }
+ }
+ }
+ } else {
+ invalidSampleIndexes.add(sampleId);
+ }
+ }
+
+ if (params.getBoolean("dry-run")) {
+ if (invalidFiles.isEmpty() && invalidSampleIndexes.isEmpty()) {
+ logger.info("Dry-run mode. No files or samples to invalidate");
+ } else {
+ logger.info("Dry-run mode. Skipping invalidation of files and samples");
+
+ Set invalidSamples = new HashSet<>();
+ for (Integer fileId : invalidFiles) {
+ invalidSamples.addAll(metadataManager.getSampleIdsFromFileId(studyId, fileId));
+ }
+
+ logger.info("Affected files: {}", invalidFiles);
+ logger.info("Affected samples: {}", invalidSamples);
+ logger.info("Affected sample indexes: {}", invalidSampleIndexes);
+ }
+ } else {
+ ObjectMap event = new ObjectMap()
+ .append("patch", getAnnotation().patch())
+ .append("description", "affected_invalid_sample")
+ .append("dateStr", TimeUtils.getTime())
+ .append("date", Date.from(Instant.now()));
+ for (Integer sampleId : invalidSampleIndexes) {
+ invalidateSecondarySampleIndex(study, sampleId, event, metadataManager, studyId, repeatMigration);
+ }
+ Set invalidSamples = new HashSet<>();
+ for (Integer fileId : invalidFiles) {
+ invalidateFileIndex(study, fileId, event, metadataManager, studyId, invalidSamples, repeatMigration);
+ }
+ for (Integer sampleId : invalidSamples) {
+ invalidateSampleIndex(study, sampleId, event, metadataManager, studyId, repeatMigration);
+ }
+
+ Set allSampleIds = new HashSet<>();
+ allSampleIds.addAll(affectedSamples);
+ allSampleIds.addAll(invalidSamples);
+ List allSampleNames = allSampleIds.stream()
+ .map(sampleId -> metadataManager.getSampleName(studyId, sampleId))
+ .collect(Collectors.toList());
+
+ if (!allSampleNames.isEmpty()) {
+ new CatalogStorageMetadataSynchronizer(catalogManager, metadataManager)
+ .synchronizeCatalogSamplesFromStorage(study, allSampleNames, token);
+ }
+
+ }
+ }
+ }
+
+ private void invalidateFileIndex(String study, Integer fileId, ObjectMap event, VariantStorageMetadataManager metadataManager, int studyId, Set invalidSamples, boolean repeatMigration) throws StorageEngineException, CatalogException {
+ ObjectMap thisEvent = new ObjectMap(event);
+ String filePath = metadataManager.updateFileMetadata(studyId, fileId, fileMetadata -> {
+ invalidSamples.addAll(fileMetadata.getSamples());
+ if (fileMetadata.getAttributes().containsKey("TASK-6078") && !repeatMigration) {
+ logger.info("File '{}'({}) already has the attribute 'TASK-6078'. Skip",
+ fileMetadata.getName(), fileMetadata.getId());
+ } else {
+ Map oldStatus = new HashMap<>(fileMetadata.getStatus());
+ fileMetadata.setIndexStatus(TaskMetadata.Status.INVALID);
+ fileMetadata.getAttributes().put("TASK-6078", thisEvent.append("oldStatus", oldStatus));
+ }
+ }).getPath();
+ String fileUri = Paths.get(filePath).toUri().toString();
+ Query query = new Query(FileDBAdaptor.QueryParams.URI.key(), fileUri);
+ File file = catalogManager.getFileManager()
+ .search(study, query, new QueryOptions(), token)
+ .first();
+ catalogManager.getFileManager().update(study, file.getId(),
+ new FileUpdateParams().setAttributes(new ObjectMap("TASK-6078", thisEvent)), QueryOptions.empty(), token);
+ catalogManager.getFileManager().updateFileInternalVariantIndex(study, file, new FileInternalVariantIndex()
+ .setStatus(new VariantIndexStatus(IndexStatus.INVALID, "Invalid status - TASK-6078 - affected_invalid_sample - "
+ + "File must be deleted and then indexed")), token);
+ }
+
+ private void invalidateSecondarySampleIndex(String study, Integer sampleId, ObjectMap event, VariantStorageMetadataManager metadataManager, int studyId, boolean repeatMigration) throws StorageEngineException, CatalogException {
+ ObjectMap thisEvent = new ObjectMap(event);
+ String sampleName = metadataManager.updateSampleMetadata(studyId, sampleId, sampleMetadata -> {
+ if (sampleMetadata.getAttributes().containsKey("TASK-6078") && !repeatMigration) {
+ logger.info("Sample '{}'({}) already has the attribute 'TASK-6078'. Skip",
+ sampleMetadata.getName(), sampleMetadata.getId());
+ } else {
+ Map oldStatus = new HashMap<>(sampleMetadata.getStatus());
+ Map oldAttributes = new HashMap<>(sampleMetadata.getAttributes());
+
+ for (Integer v : sampleMetadata.getSampleIndexVersions()) {
+ sampleMetadata.setSampleIndexStatus(TaskMetadata.Status.NONE, v);
+ }
+ for (Integer v : sampleMetadata.getSampleIndexAnnotationVersions()) {
+ sampleMetadata.setSampleIndexAnnotationStatus(TaskMetadata.Status.NONE, v);
+ }
+ for (Integer v : sampleMetadata.getFamilyIndexVersions()) {
+ sampleMetadata.setFamilyIndexStatus(TaskMetadata.Status.NONE, v);
+ }
+
+ sampleMetadata.setIndexStatus(TaskMetadata.Status.INVALID);
+ thisEvent.append("oldStatus", oldStatus);
+ thisEvent.append("oldAttributes", oldAttributes);
+ thisEvent.append("newStatus", sampleMetadata.getStatus());
+ sampleMetadata.getAttributes().put("TASK-6078", thisEvent);
+ }
+ }).getName();
+ catalogManager.getSampleManager().update(study, sampleName,
+ new SampleUpdateParams().setAttributes(new ObjectMap("TASK-6078", thisEvent)), QueryOptions.empty(), token);
+ }
+
+ private void invalidateSampleIndex(String study, Integer sampleId, ObjectMap event, VariantStorageMetadataManager metadataManager, int studyId, boolean repeatMigration) throws StorageEngineException, CatalogException {
+ ObjectMap thisEvent = new ObjectMap(event);
+ String sampleName = metadataManager.updateSampleMetadata(studyId, sampleId, sampleMetadata -> {
+ if (sampleMetadata.getAttributes().containsKey("TASK-6078") && !repeatMigration) {
+ logger.info("Sample '{}'({}) already has the attribute 'TASK-6078'. Skip",
+ sampleMetadata.getName(), sampleMetadata.getId());
+ } else {
+ Map oldStatus = new HashMap<>(sampleMetadata.getStatus());
+ Map oldAttributes = new HashMap<>(sampleMetadata.getAttributes());
+ sampleMetadata.setIndexStatus(TaskMetadata.Status.INVALID);
+
+ for (Integer v : sampleMetadata.getSampleIndexVersions()) {
+ sampleMetadata.setSampleIndexStatus(TaskMetadata.Status.NONE, v);
+ }
+ for (Integer v : sampleMetadata.getSampleIndexAnnotationVersions()) {
+ sampleMetadata.setSampleIndexAnnotationStatus(TaskMetadata.Status.NONE, v);
+ }
+ for (Integer v : sampleMetadata.getFamilyIndexVersions()) {
+ sampleMetadata.setFamilyIndexStatus(TaskMetadata.Status.NONE, v);
+ }
+ thisEvent.append("oldStatus", oldStatus);
+ thisEvent.append("oldAttributes", oldAttributes);
+ thisEvent.append("newStatus", sampleMetadata.getStatus());
+ sampleMetadata.getAttributes().put("TASK-6078", thisEvent);
+ }
+ }).getName();
+ catalogManager.getSampleManager().update(study, sampleName,
+ new SampleUpdateParams().setAttributes(new ObjectMap("TASK-6078", thisEvent)), QueryOptions.empty(), token);
+ }
+
+ private Set> getFileWithSharedSamples(VariantStorageEngine engine, int studyId) throws StorageEngineException {
+ VariantStorageMetadataManager metadataManager = engine.getMetadataManager();
+
+ Set> fileSets = new HashSet<>();
+ // Check if there are any sample with more than one file
+ for (SampleMetadata sampleMetadata : metadataManager.sampleMetadataIterable(studyId)) {
+ if (sampleMetadata.getFiles().size() > 1) {
+ if (sampleMetadata.getSplitData() == VariantStorageEngine.SplitData.CHROMOSOME || sampleMetadata.getSplitData() == VariantStorageEngine.SplitData.REGION) {
+ logger.debug("Sample '{}' is split by chromosome or region. Skip", sampleMetadata.getName());
+ continue;
+ }
+ ArrayList sampleFileIds = new ArrayList<>(sampleMetadata.getFiles());
+
+ sampleFileIds.removeIf(fileId -> !metadataManager.isFileIndexed(studyId, fileId));
+
+ if (sampleFileIds.size() > 1) {
+ logger.info("Sample '{}' has more than one indexed file with split data '{}'", sampleMetadata.getName(), sampleMetadata.getSplitData());
+
+ fileSets.add(new HashSet<>(sampleFileIds));
+ }
+ }
+ }
+ return fileSets;
+ }
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_0_0/OrganizationMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_0_0/OrganizationMigration.java
similarity index 70%
rename from opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_0_0/OrganizationMigration.java
rename to opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_0_0/OrganizationMigration.java
index 0b9982c6f71..9b226c0ea1a 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_0_0/OrganizationMigration.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_0_0/OrganizationMigration.java
@@ -1,12 +1,12 @@
-package org.opencb.opencga.app.migrations.v3_0_0;
+package org.opencb.opencga.app.migrations.v3.v3_0_0;
import org.opencb.opencga.catalog.migration.Migration;
-import org.opencb.opencga.catalog.migration.MigrationException;
import org.opencb.opencga.catalog.migration.MigrationTool;
import org.opencb.opencga.core.config.Configuration;
@Migration(id = "add_organizations", description = "Add new Organization layer #TASK-4389", version = "3.0.0",
- language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20231212)
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20231212,
+ deprecatedSince = "3.1.0")
public class OrganizationMigration extends MigrationTool {
public OrganizationMigration(Configuration configuration, String adminPassword, String userId) {
@@ -14,7 +14,6 @@ public OrganizationMigration(Configuration configuration, String adminPassword,
@Override
protected void run() throws Exception {
- throw MigrationException.outdatedMigration(getAnnotation(), "3.1.0");
}
}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/AuthOriginSimplificationMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/AuthOriginSimplificationMigration.java
similarity index 98%
rename from opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/AuthOriginSimplificationMigration.java
rename to opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/AuthOriginSimplificationMigration.java
index e913941bafd..e1b331fa987 100644
--- a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/AuthOriginSimplificationMigration.java
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/AuthOriginSimplificationMigration.java
@@ -1,4 +1,4 @@
-package org.opencb.opencga.app.migrations.v3_1_0;
+package org.opencb.opencga.app.migrations.v3.v3_1_0;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/NoteMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/NoteMigration.java
new file mode 100644
index 00000000000..c3e49a2d85e
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/NoteMigration.java
@@ -0,0 +1,51 @@
+package org.opencb.opencga.app.migrations.v3.v3_1_0;
+
+import com.mongodb.MongoNamespace;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.RenameCollectionOptions;
+import com.mongodb.client.model.Updates;
+import com.mongodb.client.result.UpdateResult;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.opencb.commons.datastore.mongodb.MongoDataStore;
+import org.opencb.opencga.catalog.db.api.NoteDBAdaptor;
+import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+import org.opencb.opencga.core.models.notes.Note;
+
+@Migration(id = "migrate_notes", description = "Migrate notes #TASK-5836", version = "3.1.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20240315)
+public class NoteMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ // First migrate to add the new values
+ MongoCollection collection = getMongoCollection(organizationId, "notes");
+ Bson query = Filters.exists(NoteDBAdaptor.QueryParams.STUDY_UID.key(), false);
+ Bson update = Updates.combine(
+ Updates.set(NoteDBAdaptor.QueryParams.STUDY_UID.key(), -1L),
+ Updates.set(NoteDBAdaptor.QueryParams.SCOPE.key(), Note.Scope.ORGANIZATION.name()),
+ Updates.set(NoteDBAdaptor.QueryParams.STUDY.key(), ""),
+ Updates.set(NoteDBAdaptor.QueryParams.VISIBILITY.key(), Note.Visibility.PRIVATE.name())
+ );
+ UpdateResult updateResult = collection.updateMany(query, update);
+ if (updateResult.getModifiedCount() == 0) {
+ logger.info("Note data model could not be updated. Notes found in organization '{}': {}", organizationId, updateResult.getMatchedCount());
+ }
+
+ // Rename Note collection
+ RenameCollectionOptions options = new RenameCollectionOptions().dropTarget(true);
+ // Rename collection
+ String databaseName = dbAdaptorFactory.getMongoDataStore(organizationId).getDatabaseName();
+ logger.info("Renaming notes collection for organization '{}' -> Database: '{}'", organizationId, databaseName);
+ MongoDataStore mongoDataStore = dbAdaptorFactory.getMongoDataStore(organizationId);
+ mongoDataStore.getDb().getCollection("notes").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.NOTE_COLLECTION), options);
+ mongoDataStore.getDb().getCollection("notes_archive").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.NOTE_ARCHIVE_COLLECTION), options);
+ mongoDataStore.getDb().getCollection("notes_deleted").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.DELETED_NOTE_COLLECTION), options);
+
+ catalogManager.installIndexes(organizationId, token);
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/UserBanMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/UserBanMigration.java
new file mode 100644
index 00000000000..b7d79b73914
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_1_0/UserBanMigration.java
@@ -0,0 +1,41 @@
+package org.opencb.opencga.app.migrations.v3.v3_1_0;
+
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.Projections;
+import com.mongodb.client.model.UpdateOneModel;
+import com.mongodb.client.model.Updates;
+import org.bson.Document;
+import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+import org.opencb.opencga.catalog.utils.Constants;
+import org.opencb.opencga.core.common.TimeUtils;
+
+@Migration(id = "addFailedLoginAttemptsMigration", description = "Add failedAttempts to User #TASK-6013", version = "3.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20240419)
+public class UserBanMigration extends MigrationTool {
+
+ @Override
+ protected void run() throws Exception {
+ String lastModified = TimeUtils.getTime();
+ migrateCollection(OrganizationMongoDBAdaptorFactory.USER_COLLECTION,
+ Filters.exists("internal.registrationDate", false),
+ Projections.include("_id", "internal", "account"),
+ (document, bulk) -> {
+ Document internal = document.get("internal", Document.class);
+ Document account = document.get("account", Document.class);
+ internal.put("failedAttempts", 0);
+ internal.put("registrationDate", account.get("creationDate"));
+ internal.put("lastModified", lastModified);
+ account.put("expirationDate", Constants.DEFAULT_USER_EXPIRATION_DATE);
+
+ bulk.add(new UpdateOneModel<>(Filters.eq("_id", document.get("_id")),
+ Updates.combine(
+ Updates.set("internal", internal),
+ Updates.set("account", account))
+ )
+ );
+ });
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_2_0/AddNewJobFieldsMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_2_0/AddNewJobFieldsMigration.java
new file mode 100644
index 00000000000..8e196973bba
--- /dev/null
+++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3/v3_2_0/AddNewJobFieldsMigration.java
@@ -0,0 +1,34 @@
+package org.opencb.opencga.app.migrations.v3.v3_2_0;
+
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.Updates;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
+import org.opencb.opencga.catalog.migration.Migration;
+import org.opencb.opencga.catalog.migration.MigrationTool;
+
+import java.util.Arrays;
+
+@Migration(id = "add_jobParentId_scheduledStartTime",
+ description = "Add 'jobParentId' and 'scheduledStartTime' to existing jobs #TASK-6171 #TASK-6089", version = "3.2.0",
+ language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20240506)
+public class AddNewJobFieldsMigration extends MigrationTool {
+
+
+ @Override
+ protected void run() throws Exception {
+ for (String jobCollection : Arrays.asList(OrganizationMongoDBAdaptorFactory.JOB_COLLECTION,
+ OrganizationMongoDBAdaptorFactory.DELETED_JOB_COLLECTION)) {
+ MongoCollection mongoCollection = getMongoCollection(jobCollection);
+ Bson query = Filters.exists("parentId", false);
+ Bson update = Updates.combine(
+ Updates.set("parentId", ""),
+ Updates.set("scheduledStartTime", "")
+ );
+ mongoCollection.updateMany(query, update);
+ }
+ }
+
+}
diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/NoteMigration.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/NoteMigration.java
deleted file mode 100644
index a842905fc70..00000000000
--- a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v3_1_0/NoteMigration.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.opencb.opencga.app.migrations.v3_1_0;
-
-import com.mongodb.MongoNamespace;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.model.Filters;
-import com.mongodb.client.model.RenameCollectionOptions;
-import com.mongodb.client.model.Updates;
-import com.mongodb.client.result.UpdateResult;
-import org.apache.commons.lang3.StringUtils;
-import org.bson.Document;
-import org.bson.conversions.Bson;
-import org.opencb.commons.datastore.mongodb.MongoDataStore;
-import org.opencb.opencga.catalog.db.api.NoteDBAdaptor;
-import org.opencb.opencga.catalog.db.mongodb.MongoDBAdaptorFactory;
-import org.opencb.opencga.catalog.db.mongodb.OrganizationMongoDBAdaptorFactory;
-import org.opencb.opencga.catalog.exceptions.CatalogDBException;
-import org.opencb.opencga.catalog.io.IOManagerFactory;
-import org.opencb.opencga.catalog.managers.CatalogManager;
-import org.opencb.opencga.catalog.migration.Migration;
-import org.opencb.opencga.catalog.migration.MigrationTool;
-import org.opencb.opencga.core.api.ParamConstants;
-import org.opencb.opencga.core.models.notes.Note;
-
-import java.util.Collections;
-import java.util.List;
-
-@Migration(id = "migrate_notes", description = "Migrate notes #TASK-5836", version = "3.1.0",
- language = Migration.MigrationLanguage.JAVA, domain = Migration.MigrationDomain.CATALOG, date = 20240315)
-public class NoteMigration extends MigrationTool {
-
- @Override
- protected void run() throws Exception {
- IOManagerFactory ioManagerFactory = new IOManagerFactory();
- dbAdaptorFactory = new MongoDBAdaptorFactory(configuration, ioManagerFactory);
- // First migrate to add the new values
- MongoCollection collection = getMongoCollection(ParamConstants.ADMIN_ORGANIZATION, "notes");
- Bson query = Filters.exists(NoteDBAdaptor.QueryParams.STUDY_UID.key(), false);
- Bson update = Updates.combine(
- Updates.set(NoteDBAdaptor.QueryParams.STUDY_UID.key(), -1L),
- Updates.set(NoteDBAdaptor.QueryParams.SCOPE.key(), Note.Scope.ORGANIZATION.name()),
- Updates.set(NoteDBAdaptor.QueryParams.STUDY.key(), ""),
- Updates.set(NoteDBAdaptor.QueryParams.VISIBILITY.key(), Note.Visibility.PRIVATE.name())
- );
- UpdateResult updateResult = collection.updateMany(query, update);
- if (updateResult.getModifiedCount() == 0) {
- // Check there are at least 2 organizations present
- logger.info("Note data model could not be updated. Detected organizations are: {}", StringUtils.join(dbAdaptorFactory.getOrganizationIds(), ","));
- if (dbAdaptorFactory.getOrganizationIds().size() == 2) {
- logger.info("Nothing to migrate");
- return;
- } else {
- throw new CatalogDBException("Notes could not be found to migrate.");
- }
- }
- renameNoteCollection(Collections.singletonList(ParamConstants.ADMIN_ORGANIZATION));
-
- dbAdaptorFactory.close();
- dbAdaptorFactory = new MongoDBAdaptorFactory(configuration, ioManagerFactory);
- // We run it a second time because the first time it will only rename the "opencga" org as OpenCGA will not be able to know
- // which other organizations are present in the installation (trying to fetch the information from "note" instead of old "notes")
- List organizationIds = dbAdaptorFactory.getOrganizationIds();
- organizationIds.remove(ParamConstants.ADMIN_ORGANIZATION);
- renameNoteCollection(organizationIds);
-
- // Reload catalog manager to install missing indexes
- catalogManager = new CatalogManager(configuration);
- catalogManager.installIndexes(token);
- }
-
- private void renameNoteCollection(List organizationIds) throws CatalogDBException {
- RenameCollectionOptions options = new RenameCollectionOptions().dropTarget(true);
- // Rename collection
- for (String organizationId : organizationIds) {
- String databaseName = dbAdaptorFactory.getMongoDataStore(organizationId).getDatabaseName();
- logger.info("Renaming notes collection for organization '{}' -> Database: '{}'", organizationId, databaseName);
- MongoDataStore mongoDataStore = dbAdaptorFactory.getMongoDataStore(organizationId);
- mongoDataStore.getDb().getCollection("notes").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.NOTE_COLLECTION), options);
- mongoDataStore.getDb().getCollection("notes_archive").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.NOTE_ARCHIVE_COLLECTION), options);
- mongoDataStore.getDb().getCollection("notes_deleted").renameCollection(new MongoNamespace(databaseName, OrganizationMongoDBAdaptorFactory.DELETED_NOTE_COLLECTION), options);
- }
- }
-
-}
diff --git a/opencga-catalog/pom.xml b/opencga-catalog/pom.xml
index d15b4768e59..7457317446b 100644
--- a/opencga-catalog/pom.xml
+++ b/opencga-catalog/pom.xml
@@ -23,7 +23,7 @@
org.opencb.opencga
opencga
- 3.2.0-SNAPSHOT
+ 3.2.1-SNAPSHOT
../pom.xml
@@ -200,18 +200,6 @@
com.microsoft.azure
azure-client-runtime
-
- com.microsoft.azure
- azure
-
-
- io.fabric8
- kubernetes-client
-
-
- com.microsoft.azure
- azure-batch
-
io.jsonwebtoken
jjwt-jackson
@@ -247,6 +235,12 @@
template.zip
+
+ ../opencga-core/src/test/resources
+
+ log4j2-test.xml
+
+
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AuthenticationManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AuthenticationManager.java
index 345ac2977b7..d93cf48c4a7 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AuthenticationManager.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AuthenticationManager.java
@@ -28,6 +28,7 @@
import org.slf4j.LoggerFactory;
import javax.crypto.spec.SecretKeySpec;
+import java.io.Closeable;
import java.security.Key;
import java.util.Collections;
import java.util.Date;
@@ -37,7 +38,7 @@
/**
* @author Jacobo Coll <jacobo167@gmail.com>
*/
-public abstract class AuthenticationManager {
+public abstract class AuthenticationManager implements Closeable {
protected JwtManager jwtManager;
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AzureADAuthenticationManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AzureADAuthenticationManager.java
index b0f525af072..f104f8fdf93 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AzureADAuthenticationManager.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/AzureADAuthenticationManager.java
@@ -146,6 +146,15 @@ public AzureADAuthenticationManager(AuthenticationOrigin authenticationOrigin) t
Configurator.setLevel("com.microsoft.aad.adal4j.AuthenticationAuthority", Level.WARN);
}
+ public static void validateAuthenticationOriginConfiguration(AuthenticationOrigin authenticationOrigin) throws CatalogException {
+ if (authenticationOrigin.getType() != AuthenticationOrigin.AuthenticationType.AzureAD) {
+ throw new CatalogException("Unknown authentication type. Expected type '" + AuthenticationOrigin.AuthenticationType.AzureAD
+ + "' but received '" + authenticationOrigin.getType() + "'.");
+ }
+ AzureADAuthenticationManager azureADAuthenticationManager = new AzureADAuthenticationManager(authenticationOrigin);
+ azureADAuthenticationManager.close();
+ }
+
private OIDCProviderMetadata getProviderMetadata(String host) throws IOException, ParseException {
URL providerConfigurationURL = new URL(host);
InputStream stream = providerConfigurationURL.openStream();
@@ -420,4 +429,8 @@ public String createNonExpiringToken(String organizationId, String userId, Map claims, long expiration) {
- return jwtManager.createJWTToken(organizationId, userId, claims, expiration);
+ return jwtManager.createJWTToken(organizationId, AuthenticationOrigin.AuthenticationType.OPENCGA, userId, claims, expiration);
}
@Override
public String createNonExpiringToken(String organizationId, String userId, Map claims) {
- return jwtManager.createJWTToken(organizationId, userId, claims, 0L);
+ return jwtManager.createJWTToken(organizationId, AuthenticationOrigin.AuthenticationType.OPENCGA, userId, claims, 0L);
}
@Override
@@ -131,7 +142,7 @@ public OpenCGAResult resetPassword(String organizationId, String userId) throws
String mailHost = this.emailConfig.getHost();
String mailPort = this.emailConfig.getPort();
try {
- MailUtils.sendResetPasswordMail(email, newPassword, mailUser, mailPassword, mailHost, mailPort);
+ MailUtils.sendResetPasswordMail(email, newPassword, mailUser, mailPassword, mailHost, mailPort, userId);
result = dbAdaptorFactory.getCatalogUserDBAdaptor(organizationId).resetPassword(userId, email, newPassword);
} catch (Exception e) {
throw new CatalogException("Email could not be sent.", e);
@@ -145,4 +156,8 @@ public static AuthenticationOrigin createOpencgaAuthenticationOrigin() {
.setId(CatalogAuthenticationManager.OPENCGA)
.setType(AuthenticationOrigin.AuthenticationType.OPENCGA);
}
+
+ @Override
+ public void close() {
+ }
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/JwtManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/JwtManager.java
index 8cbb28decca..fd0462e3a98 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/JwtManager.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/JwtManager.java
@@ -18,6 +18,7 @@
import io.jsonwebtoken.*;
import org.opencb.opencga.catalog.exceptions.CatalogAuthenticationException;
+import org.opencb.opencga.core.config.AuthenticationOrigin;
import org.opencb.opencga.core.models.JwtPayload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,6 +30,8 @@
import java.util.List;
import java.util.Map;
+import static org.opencb.opencga.core.models.JwtPayload.AUTH_ORIGIN;
+
public class JwtManager {
private SignatureAlgorithm algorithm;
@@ -84,13 +87,18 @@ public JwtManager setPublicKey(Key publicKey) {
return this;
}
- public String createJWTToken(String organizationId, String userId, Map claims, long expiration) {
+ public String createJWTToken(String organizationId, AuthenticationOrigin.AuthenticationType type, String userId,
+ Map claims, long expiration) {
long currentTime = System.currentTimeMillis();
JwtBuilder jwtBuilder = Jwts.builder();
if (claims != null && !claims.isEmpty()) {
jwtBuilder.setClaims(claims);
}
+ if (type != null) {
+ jwtBuilder.addClaims(Collections.singletonMap(AUTH_ORIGIN, type));
+ }
+
jwtBuilder.setSubject(userId)
.setAudience(organizationId)
.setIssuer("OpenCGA")
@@ -115,14 +123,24 @@ public void validateToken(String token, Key publicKey) throws CatalogAuthenticat
public JwtPayload getPayload(String token) throws CatalogAuthenticationException {
Claims body = parseClaims(token, publicKey).getBody();
- return new JwtPayload(body.getSubject(), body.getAudience(), body.getIssuer(), body.getIssuedAt(), body.getExpiration(), token);
+ return new JwtPayload(body.getSubject(), body.getAudience(), getAuthOrigin(body), body.getIssuer(), body.getIssuedAt(),
+ body.getExpiration(), token);
}
public JwtPayload getPayload(String token, Key publicKey) throws CatalogAuthenticationException {
Claims body = parseClaims(token, publicKey).getBody();
- return new JwtPayload(body.getSubject(), body.getAudience(), body.getIssuer(), body.getIssuedAt(), body.getExpiration(), token);
+ return new JwtPayload(body.getSubject(), body.getAudience(), getAuthOrigin(body), body.getIssuer(), body.getIssuedAt(),
+ body.getExpiration(), token);
}
+ private AuthenticationOrigin.AuthenticationType getAuthOrigin(Claims claims) {
+ String o = claims.get(AUTH_ORIGIN, String.class);
+ if (o != null) {
+ return AuthenticationOrigin.AuthenticationType.valueOf(o);
+ } else {
+ return null;
+ }
+ }
public String getAudience(String token) throws CatalogAuthenticationException {
return getAudience(token, this.publicKey);
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/LDAPAuthenticationManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/LDAPAuthenticationManager.java
index 516a54702c2..35fe615d161 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/LDAPAuthenticationManager.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/LDAPAuthenticationManager.java
@@ -24,8 +24,10 @@
import org.opencb.commons.datastore.core.ObjectMap;
import org.opencb.opencga.catalog.exceptions.CatalogAuthenticationException;
import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.catalog.utils.ParamUtils;
import org.opencb.opencga.core.common.TimeUtils;
import org.opencb.opencga.core.config.AuthenticationOrigin;
+import org.opencb.opencga.core.models.organizations.TokenConfiguration;
import org.opencb.opencga.core.models.user.*;
import org.opencb.opencga.core.response.OpenCGAResult;
import org.slf4j.LoggerFactory;
@@ -124,6 +126,24 @@ protected static String envToStringRedacted(Hashtable env) {
return string;
}
+ public static void validateAuthenticationOriginConfiguration(AuthenticationOrigin authenticationOrigin) throws CatalogException {
+ if (authenticationOrigin.getType() != AuthenticationType.LDAP) {
+ throw new CatalogException("Unknown authentication type. Expected type '" + AuthenticationType.LDAP + "' but received '"
+ + authenticationOrigin.getType() + "'.");
+ }
+ ParamUtils.checkParameter(authenticationOrigin.getHost(), AuthenticationType.LDAP + " host.");
+
+ TokenConfiguration defaultTokenConfig = TokenConfiguration.init();
+ LDAPAuthenticationManager ldapAuthenticationManager = new LDAPAuthenticationManager(authenticationOrigin,
+ defaultTokenConfig.getAlgorithm(), defaultTokenConfig.getSecretKey(), defaultTokenConfig.getExpiration());
+ DirContext dirContext = ldapAuthenticationManager.getDirContext(ldapAuthenticationManager.getDefaultEnv(), 1);
+ if (dirContext == null) {
+ throw new CatalogException("LDAP: Could not connect to the LDAP server using the provided configuration.");
+ }
+ ldapAuthenticationManager.closeDirContextAndSuppress(dirContext, new Exception());
+ ldapAuthenticationManager.close();
+ }
+
@Override
public AuthenticationResponse authenticate(String organizationId, String userId, String password)
throws CatalogAuthenticationException {
@@ -213,12 +233,12 @@ public void newPassword(String organizationId, String userId, String newPassword
@Override
public String createToken(String organizationId, String userId, Map claims, long expiration) {
- return jwtManager.createJWTToken(organizationId, userId, claims, expiration);
+ return jwtManager.createJWTToken(organizationId, AuthenticationType.LDAP, userId, claims, expiration);
}
@Override
public String createNonExpiringToken(String organizationId, String userId, Map claims) {
- return jwtManager.createJWTToken(organizationId, userId, claims, 0L);
+ return jwtManager.createJWTToken(organizationId, AuthenticationType.LDAP, userId, claims, 0L);
}
/* Private methods */
@@ -503,4 +523,9 @@ private String takeString(ObjectMap objectMap, String key, String defaultValue)
objectMap.remove(key);
return value;
}
+
+ @Override
+ public void close() {
+ executorService.shutdown();
+ }
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/SSOAuthenticationManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/SSOAuthenticationManager.java
new file mode 100644
index 00000000000..e676029e413
--- /dev/null
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/SSOAuthenticationManager.java
@@ -0,0 +1,87 @@
+package org.opencb.opencga.catalog.auth.authentication;
+
+import io.jsonwebtoken.SignatureAlgorithm;
+import org.apache.commons.lang3.NotImplementedException;
+import org.opencb.opencga.catalog.exceptions.CatalogAuthenticationException;
+import org.opencb.opencga.catalog.exceptions.CatalogException;
+import org.opencb.opencga.core.config.AuthenticationOrigin;
+import org.opencb.opencga.core.models.user.AuthenticationResponse;
+import org.opencb.opencga.core.models.user.User;
+import org.opencb.opencga.core.response.OpenCGAResult;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.security.Key;
+import java.util.List;
+import java.util.Map;
+
+public class SSOAuthenticationManager extends AuthenticationManager {
+
+ public SSOAuthenticationManager(String algorithm, String secretKeyString, long expiration) {
+ super(expiration);
+
+ SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.valueOf(algorithm);
+ Key secretKey = this.converStringToKeyObject(secretKeyString, signatureAlgorithm.getJcaName());
+ this.jwtManager = new JwtManager(signatureAlgorithm.getValue(), secretKey);
+
+ this.logger = LoggerFactory.getLogger(SSOAuthenticationManager.class);
+ }
+
+ public static void validateAuthenticationOriginConfiguration(AuthenticationOrigin authenticationOrigin) throws CatalogException {
+ if (authenticationOrigin.getType() != AuthenticationOrigin.AuthenticationType.SSO) {
+ throw new CatalogException("Unknown authentication type. Expected type '" + AuthenticationOrigin.AuthenticationType.SSO
+ + "' but received '" + authenticationOrigin.getType() + "'.");
+ }
+ }
+
+ @Override
+ public AuthenticationResponse authenticate(String organizationId, String userId, String password)
+ throws CatalogAuthenticationException {
+ throw new NotImplementedException("Authentication should be done through SSO");
+ }
+
+ @Override
+ public List getUsersFromRemoteGroup(String group) throws CatalogException {
+ throw new NotImplementedException("Operation not implemented");
+ }
+
+ @Override
+ public List getRemoteUserInformation(List userStringList) throws CatalogException {
+ throw new NotImplementedException("Operation not implemented");
+ }
+
+ @Override
+ public List getRemoteGroups(String token) throws CatalogException {
+ throw new NotImplementedException("Operation not implemented");
+ }
+
+ @Override
+ public void changePassword(String organizationId, String userId, String oldPassword, String newPassword) throws CatalogException {
+ throw new NotImplementedException("Change password should be done through SSO");
+ }
+
+ @Override
+ public OpenCGAResult resetPassword(String organizationId, String userId) throws CatalogException {
+ throw new NotImplementedException("Reset password should be done through SSO");
+ }
+
+ @Override
+ public void newPassword(String organizationId, String userId, String newPassword) throws CatalogException {
+ throw new NotImplementedException("Setting a new password should be done through SSO");
+ }
+
+ @Override
+ public String createToken(String organizationId, String userId, Map claims, long expiration) {
+ return jwtManager.createJWTToken(organizationId, AuthenticationOrigin.AuthenticationType.SSO, userId, claims, expiration);
+ }
+
+ @Override
+ public String createNonExpiringToken(String organizationId, String userId, Map claims) {
+ return jwtManager.createJWTToken(organizationId, AuthenticationOrigin.AuthenticationType.SSO, userId, claims, 0L);
+ }
+
+ @Override
+ public void close() throws IOException {
+
+ }
+}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/azure/AuthenticationFactory.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/azure/AuthenticationFactory.java
index d1b1246e468..7172401fda7 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/azure/AuthenticationFactory.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authentication/azure/AuthenticationFactory.java
@@ -2,16 +2,14 @@
import org.apache.commons.collections4.CollectionUtils;
import org.opencb.commons.datastore.core.QueryOptions;
-import org.opencb.opencga.catalog.auth.authentication.AuthenticationManager;
-import org.opencb.opencga.catalog.auth.authentication.AzureADAuthenticationManager;
-import org.opencb.opencga.catalog.auth.authentication.CatalogAuthenticationManager;
-import org.opencb.opencga.catalog.auth.authentication.LDAPAuthenticationManager;
+import org.opencb.opencga.catalog.auth.authentication.*;
import org.opencb.opencga.catalog.db.DBAdaptorFactory;
import org.opencb.opencga.catalog.db.api.OrganizationDBAdaptor;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.catalog.managers.OrganizationManager;
+import org.opencb.opencga.catalog.utils.ParamUtils;
import org.opencb.opencga.core.config.AuthenticationOrigin;
-import org.opencb.opencga.core.config.Email;
+import org.opencb.opencga.core.config.Configuration;
import org.opencb.opencga.core.models.organizations.Organization;
import org.opencb.opencga.core.models.user.AuthenticationResponse;
import org.opencb.opencga.core.models.user.User;
@@ -19,6 +17,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -30,16 +29,15 @@ public final class AuthenticationFactory {
private final Map> authenticationManagerMap;
private final Logger logger = LoggerFactory.getLogger(AuthenticationFactory.class);
private final DBAdaptorFactory catalogDBAdaptorFactory;
+ private final Configuration configuration;
- public AuthenticationFactory(DBAdaptorFactory catalogDBAdaptorFactory) {
+ public AuthenticationFactory(DBAdaptorFactory catalogDBAdaptorFactory, Configuration configuration) {
this.catalogDBAdaptorFactory = catalogDBAdaptorFactory;
+ this.configuration = configuration;
authenticationManagerMap = new ConcurrentHashMap<>();
}
public void configureOrganizationAuthenticationManager(Organization organization) throws CatalogException {
- // TODO: Pass proper email values
- Email email = new Email();
-
Map tmpAuthenticationManagerMap = new HashMap<>();
long expiration = organization.getConfiguration().getToken().getExpiration();
@@ -60,10 +58,15 @@ public void configureOrganizationAuthenticationManager(Organization organization
break;
case OPENCGA:
CatalogAuthenticationManager catalogAuthenticationManager =
- new CatalogAuthenticationManager(catalogDBAdaptorFactory, email, algorithm, secretKey, expiration);
+ new CatalogAuthenticationManager(catalogDBAdaptorFactory, configuration.getEmail(), algorithm,
+ secretKey, expiration);
tmpAuthenticationManagerMap.put(CatalogAuthenticationManager.INTERNAL, catalogAuthenticationManager);
tmpAuthenticationManagerMap.put(CatalogAuthenticationManager.OPENCGA, catalogAuthenticationManager);
break;
+ case SSO:
+ tmpAuthenticationManagerMap.put(authOrigin.getId(), new SSOAuthenticationManager(algorithm, secretKey,
+ expiration));
+ break;
default:
logger.warn("Unexpected authentication origin type '{}' for id '{}' found in organization '{}'. "
+ "Authentication origin will be ignored.", authOrigin.getType(), organization.getId(),
@@ -76,6 +79,18 @@ public void configureOrganizationAuthenticationManager(Organization organization
if (tmpAuthenticationManagerMap.isEmpty()) {
throw new CatalogException("No authentication origin found for organization '" + organization.getId() + "'");
}
+ if (authenticationManagerMap.containsKey(organization.getId())) {
+ for (AuthenticationManager authenticationManager : authenticationManagerMap.get(organization.getId()).values()) {
+ try {
+ logger.info("Closing previous authentication manager for organization '{}'", organization.getId());
+ authenticationManager.close();
+ } catch (IOException e) {
+ throw new CatalogException("Unable to close previous authentication manager for organization '" + organization.getId()
+ + "'.", e);
+ }
+ }
+ logger.info("Reloading new set of AuthenticationManagers for organization '{}'", organization.getId());
+ }
authenticationManagerMap.put(organization.getId(), tmpAuthenticationManagerMap);
}
@@ -147,4 +162,25 @@ public AuthenticationManager getOrganizationAuthenticationManager(String organiz
return organizationAuthenticationManagers.get(authOriginId);
}
+ public void validateAuthenticationOrigin(AuthenticationOrigin authenticationOrigin) throws CatalogException {
+ ParamUtils.checkParameter(authenticationOrigin.getId(), "authentication origin id");
+ ParamUtils.checkObj(authenticationOrigin.getType(), "authentication origin type");
+ switch (authenticationOrigin.getType()) {
+ case OPENCGA:
+ CatalogAuthenticationManager.validateAuthenticationOriginConfiguration(authenticationOrigin);
+ break;
+ case LDAP:
+ LDAPAuthenticationManager.validateAuthenticationOriginConfiguration(authenticationOrigin);
+ break;
+ case AzureAD:
+ AzureADAuthenticationManager.validateAuthenticationOriginConfiguration(authenticationOrigin);
+ break;
+ case SSO:
+ SSOAuthenticationManager.validateAuthenticationOriginConfiguration(authenticationOrigin);
+ break;
+ default:
+ throw new CatalogException("Unknown authentication origin type '" + authenticationOrigin.getType() + "'");
+ }
+ }
+
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authorization/CatalogAuthorizationManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authorization/CatalogAuthorizationManager.java
index b58c117d94f..7022be4a0e7 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authorization/CatalogAuthorizationManager.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/auth/authorization/CatalogAuthorizationManager.java
@@ -19,6 +19,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.opencb.commons.datastore.core.Query;
+import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.opencga.catalog.db.DBAdaptorFactory;
import org.opencb.opencga.catalog.db.api.*;
import org.opencb.opencga.catalog.exceptions.CatalogAuthorizationException;
@@ -79,7 +80,34 @@ public void checkCanEditProject(String organizationId, long projectId, String us
if (isAtLeastOrganizationOwnerOrAdmin(organizationId, userId)) {
return;
}
- throw new CatalogAuthorizationException("Permission denied: Only the organization owner or administrators can update the project.");
+ try {
+ checkUserIsStudyAdminInAllStudiesOfProject(organizationId, projectId, userId);
+ } catch (CatalogException e) {
+ throw new CatalogAuthorizationException("Permission denied: Only the organization owner, administrators, or users who are "
+ + "study administrators in all studies within the project can update the project.", e);
+ }
+ }
+
+ private void checkUserIsStudyAdminInAllStudiesOfProject(String organizationId, long projectUid, String userId) throws CatalogException {
+ Query query = new Query(StudyDBAdaptor.QueryParams.PROJECT_UID.key(), projectUid);
+ QueryOptions options = new QueryOptions(QueryOptions.INCLUDE,
+ Arrays.asList(StudyDBAdaptor.QueryParams.GROUPS.key(), StudyDBAdaptor.QueryParams.FQN.key()));
+ OpenCGAResult studyResult = dbAdaptorFactory.getCatalogStudyDBAdaptor(organizationId).get(query, options);
+ List nonAdminStudyIds = new ArrayList<>();
+ for (Study study : studyResult.getResults()) {
+ for (Group group : study.getGroups()) {
+ if (group.getId().equals(ADMINS_GROUP)) {
+ if (!group.getUserIds().contains(userId)) {
+ nonAdminStudyIds.add(study.getFqn());
+ }
+ break;
+ }
+ }
+ }
+ if (!nonAdminStudyIds.isEmpty()) {
+ throw new CatalogAuthorizationException("Permission denied: User " + userId + " is not an administrator of the following"
+ + " studies: " + String.join(", ", nonAdminStudyIds));
+ }
}
@Override
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/FileDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/FileDBAdaptor.java
index e138ae26dbf..2ffe6fd1ee9 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/FileDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/FileDBAdaptor.java
@@ -68,6 +68,7 @@ enum QueryParams implements QueryParam {
INTERNAL_STATUS_DESCRIPTION("internal.status.description", TEXT, ""),
INTERNAL_STATUS_DATE("internal.status.date", TEXT, ""),
RELATED_FILES("relatedFiles", TEXT_ARRAY, ""),
+ RELATED_FILES_FILE_UID("relatedFiles.file.uid", LONG, ""),
RELATED_FILES_RELATION("relatedFiles.relation", TEXT, ""),
SIZE("size", INTEGER, ""),
EXPERIMENT("experiment", OBJECT, ""),
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/JobDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/JobDBAdaptor.java
index b34721cc1f7..a6016da7441 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/JobDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/JobDBAdaptor.java
@@ -126,6 +126,7 @@ enum QueryParams implements QueryParam {
INTERNAL_STATUS_DATE("internal.status.date", TEXT, ""),
INTERNAL_WEBHOOK("internal.webhook", OBJECT, ""),
INTERNAL_EVENTS("internal.events", OBJECT, ""),
+ INTERNAL_KILL_JOB_REQUESTED("internal.killJobRequested", BOOLEAN, ""),
OUT_DIR("outDir", OBJECT, ""),
INPUT("input", OBJECT, ""),
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/OrganizationDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/OrganizationDBAdaptor.java
index f9175b0a908..d8d8e8a0a51 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/OrganizationDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/OrganizationDBAdaptor.java
@@ -17,6 +17,7 @@
public interface OrganizationDBAdaptor extends Iterable {
String IS_ORGANIZATION_ADMIN_OPTION = "isOrgAdmin";
+ String AUTH_ORIGINS_FIELD = "authenticationOrigins";
enum QueryParams implements QueryParam {
UID("uid", LONG, ""),
@@ -28,8 +29,10 @@ enum QueryParams implements QueryParam {
INTERNAL("internal", OBJECT, ""),
INTERNAL_MIGRATION_EXECUTIONS("internal.migrationExecutions", OBJECT, ""),
CONFIGURATION("configuration", OBJECT, ""),
- CONFIGURATION_AUTHENTICATION_ORIGINS("configuration.authenticationOrigins", OBJECT, ""),
- CONFIGURATION_AUTHENTICATION_ORIGINS_OPTIONS("configuration.authenticationOrigins.options", OBJECT, ""),
+ CONFIGURATION_OPTIMIZATIONS("configuration.optimizations", OBJECT, ""),
+ CONFIGURATION_AUTHENTICATION_ORIGINS("configuration." + AUTH_ORIGINS_FIELD, OBJECT, ""),
+ CONFIGURATION_AUTHENTICATION_ORIGINS_ID("configuration." + AUTH_ORIGINS_FIELD + ".id", STRING, ""),
+ CONFIGURATION_AUTHENTICATION_ORIGINS_OPTIONS("configuration." + AUTH_ORIGINS_FIELD + ".options", OBJECT, ""),
CONFIGURATION_TOKEN("configuration.token", OBJECT, ""),
CREATION_DATE("creationDate", DATE, ""),
MODIFICATION_DATE("modificationDate", DATE, ""),
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/UserDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/UserDBAdaptor.java
index 8a6c7207968..3099262e917 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/UserDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/UserDBAdaptor.java
@@ -118,13 +118,15 @@ enum QueryParams implements QueryParam {
NAME("name", TEXT_ARRAY, ""),
EMAIL("email", TEXT_ARRAY, ""),
ORGANIZATION("organization", TEXT_ARRAY, ""),
+ INTERNAL("internal", OBJECT, ""),
+ INTERNAL_FAILED_ATTEMPTS("internal.failedAttempts", INTEGER, ""),
INTERNAL_STATUS_ID("internal.status.id", TEXT, ""),
INTERNAL_STATUS_DATE("internal.status.date", TEXT, ""),
ACCOUNT("account", TEXT_ARRAY, ""),
ACCOUNT_AUTHENTICATION_ID("account.authentication.id", TEXT, ""),
ACCOUNT_CREATION_DATE("account.creationDate", TEXT, ""),
- SIZE("size", INTEGER_ARRAY, ""),
- QUOTA("quota", INTEGER_ARRAY, ""),
+ ACCOUNT_EXPIRATION_DATE("account.expirationDate", TEXT, ""),
+ QUOTA("quota", OBJECT, ""),
ATTRIBUTES("attributes", TEXT, ""), // "Format: where is [<|<=|>|>=|==|!=|~|!~]"
PROJECTS("projects", TEXT_ARRAY, ""),
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBAdaptor.java
index f7896320d10..445c1c6047a 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBAdaptor.java
@@ -259,8 +259,9 @@ public List effectivePermissions(long studyUid, List resourceIdList
}
Document studyDocument = studyResult.first();
+ boolean simplifyPermissions = simplifyPermissions();
Map> groupsMap = getGroupUsersMap(studyDocument);
- Map> studyUserPermissionsMap = extractUserPermissionsMap(groupsMap, studyDocument);
+ Map> studyUserPermissionsMap = extractUserPermissionsMap(groupsMap, studyDocument, simplifyPermissions);
// Retrieve ACL list for the resources requested
MongoDBCollection collection = getMainCollection(entry);
@@ -284,7 +285,8 @@ public List effectivePermissions(long studyUid, List resourceIdList
throw new CatalogDBException("Resource id '" + resourceId + "' not found.");
}
Document resourceDocument = dataResultMap.get(resourceId);
- Map> resourceUserPermissionsMap = extractUserPermissionsMap(groupsMap, resourceDocument);
+ Map> resourceUserPermissionsMap = extractUserPermissionsMap(groupsMap, resourceDocument,
+ simplifyPermissions);
Acl acl = convertPermissionsToAcl(groupsMap, studyUserPermissionsMap, resourceUserPermissionsMap, resourceId, entry);
aclList.add(acl);
}
@@ -357,7 +359,8 @@ private Acl convertPermissionsToAcl(Map> groupsMap, Map> extractUserPermissionsMap(Map> groupsMap, Document document) {
+ private Map> extractUserPermissionsMap(Map> groupsMap, Document document,
+ boolean simplifyPermissions) {
Set allUsers = groupsMap.get(ParamConstants.MEMBERS_GROUP);
// Map of userId - List of permissions
@@ -383,8 +386,6 @@ private Map> extractUserPermissionsMap(Map userIdsWithPermissions = new HashSet<>();
// Personal ACLs
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBUtils.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBUtils.java
index 987a493fd38..fb8a3952f50 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBUtils.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/AuthorizationMongoDBUtils.java
@@ -25,7 +25,6 @@
import org.opencb.opencga.catalog.exceptions.CatalogDBException;
import org.opencb.opencga.catalog.exceptions.CatalogParameterException;
import org.opencb.opencga.core.api.ParamConstants;
-import org.opencb.opencga.core.config.Configuration;
import org.opencb.opencga.core.models.common.Enums;
import org.opencb.opencga.core.models.study.StudyPermissions;
@@ -200,35 +199,18 @@ private static int getPermissionType(Enums.Resource resource) throws CatalogPara
/**
* If query contains {@link ParamConstants#ACL_PARAM}, it will parse the value to generate the corresponding mongo query documents.
*
- * @param study Queried study document.
- * @param query Original query.
- * @param resource Affected resource.
- * @param user User performing the query.
- * @return A list of documents to satisfy the ACL query.
- * @throws CatalogDBException when there is a DB error.
- * @throws CatalogParameterException if there is any formatting error.
- * @throws CatalogAuthorizationException if the user is not authorised to perform the query.
- */
- public static List parseAclQuery(Document study, Query query, Enums.Resource resource, String user)
- throws CatalogDBException, CatalogParameterException, CatalogAuthorizationException {
- return parseAclQuery(study, query, resource, user, null);
- }
-
- /**
- * If query contains {@link ParamConstants#ACL_PARAM}, it will parse the value to generate the corresponding mongo query documents.
- *
- * @param study Queried study document.
- * @param query Original query.
- * @param resource Affected resource.
- * @param user User performing the query.
- * @param configuration Configuration object.
+ * @param study Queried study document.
+ * @param query Original query.
+ * @param resource Affected resource.
+ * @param user User performing the query.
+ * @param simplifyPermissions Boolean indicating whether permission check can be simplified.
* @return A list of documents to satisfy the ACL query.
* @throws CatalogDBException when there is a DB error.
* @throws CatalogParameterException if there is any formatting error.
* @throws CatalogAuthorizationException if the user is not authorised to perform the query.
*/
public static List parseAclQuery(Document study, Query query, Enums.Resource resource, String user,
- Configuration configuration)
+ boolean simplifyPermissions)
throws CatalogDBException, CatalogParameterException, CatalogAuthorizationException {
List aclDocuments = new LinkedList<>();
if (!query.containsKey(ParamConstants.ACL_PARAM)) {
@@ -264,11 +246,6 @@ public static List parseAclQuery(Document study, Query query, Enums.Re
+ study.getString(StudyDBAdaptor.QueryParams.ID.key()));
}
- boolean simplifyPermissionCheck = false;
- if (configuration != null && configuration.getOptimizations() != null) {
- simplifyPermissionCheck = configuration.getOptimizations().isSimplifyPermissions();
- }
-
boolean isAnonymousPresent = false;
boolean isRegisteredUsersPresent = false;
List groups;
@@ -302,7 +279,7 @@ public static List parseAclQuery(Document study, Query query, Enums.Re
}
Document queryDocument = getAuthorisedEntries(affectedUser, groups, permission, isRegisteredUsersPresent, isAnonymousPresent,
- simplifyPermissionCheck);
+ simplifyPermissions);
if (hasStudyPermissions) {
// The user has permissions defined globally, so we also have to check the entries where the user/groups/members/* have no
// permissions defined as the user will also be allowed to see them
@@ -317,13 +294,8 @@ public static List parseAclQuery(Document study, Query query, Enums.Re
return aclDocuments;
}
- public static Document getQueryForAuthorisedEntries(Document study, String user, String permission, Enums.Resource resource)
- throws CatalogAuthorizationException, CatalogParameterException {
- return getQueryForAuthorisedEntries(study, user, permission, resource, null);
- }
-
public static Document getQueryForAuthorisedEntries(Document study, String user, String permission, Enums.Resource resource,
- Configuration configuration)
+ boolean simplifyPermissions)
throws CatalogAuthorizationException, CatalogParameterException {
if (StringUtils.isEmpty(user)) {
return new Document();
@@ -342,11 +314,6 @@ public static Document getQueryForAuthorisedEntries(Document study, String user,
+ study.getString(StudyDBAdaptor.QueryParams.ID.key()));
}
- boolean simplifyPermissionCheck = false;
- if (configuration != null && configuration.getOptimizations() != null) {
- simplifyPermissionCheck = configuration.getOptimizations().isSimplifyPermissions();
- }
-
String studyPermission = StudyPermissions.Permissions.getStudyPermission(permission, getPermissionType(resource)).name();
// 0. Check if anonymous has any permission defined (just for performance)
@@ -375,8 +342,8 @@ public static Document getQueryForAuthorisedEntries(Document study, String user,
}
Document queryDocument = getAuthorisedEntries(user, groups, permission, isRegisteredUsersPresent, isAnonymousPresent,
- simplifyPermissionCheck);
- if (hasStudyPermissions && !simplifyPermissionCheck) {
+ simplifyPermissions);
+ if (hasStudyPermissions && !simplifyPermissions) {
// The user has permissions defined globally, so we also have to check the entries where the user/groups/members/* have no
// permissions defined as the user will also be allowed to see them
queryDocument = new Document("$or", Arrays.asList(
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ClinicalAnalysisMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ClinicalAnalysisMongoDBAdaptor.java
index a4073a8c192..ec066ba4fc6 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ClinicalAnalysisMongoDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ClinicalAnalysisMongoDBAdaptor.java
@@ -33,6 +33,7 @@
import org.opencb.commons.datastore.mongodb.MongoDBIterator;
import org.opencb.opencga.catalog.db.api.ClinicalAnalysisDBAdaptor;
import org.opencb.opencga.catalog.db.api.DBIterator;
+import org.opencb.opencga.catalog.db.api.FileDBAdaptor;
import org.opencb.opencga.catalog.db.api.InterpretationDBAdaptor;
import org.opencb.opencga.catalog.db.mongodb.converters.ClinicalAnalysisConverter;
import org.opencb.opencga.catalog.db.mongodb.iterators.ClinicalAnalysisCatalogMongoDBIterator;
@@ -151,6 +152,10 @@ static void fixFilesForRemoval(ObjectMap parameters, String key) {
for (Object file : parameters.getAsList(key)) {
if (file instanceof File) {
fileParamList.add(new Document("uid", ((File) file).getUid()));
+ } else if (file instanceof Document) {
+ fileParamList.add(new Document("uid", ((Document) file).get("uid")));
+ } else {
+ throw new IllegalArgumentException("Expected a File or Document object");
}
}
parameters.put(key, fileParamList);
@@ -814,6 +819,25 @@ OpenCGAResult> privateDelete(ClientSession clientSession, ClinicalAnalysis cli
return endWrite(tmpStartTime, 1, 0, 0, 1, Collections.emptyList());
}
+ void removeFileReferences(ClientSession clientSession, long studyUid, long fileUid, Document file)
+ throws CatalogParameterException, CatalogDBException, CatalogAuthorizationException {
+ ObjectMap parameters = new ObjectMap(FILES.key(), Collections.singletonList(file));
+ ObjectMap actionMap = new ObjectMap(FILES.key(), ParamUtils.BasicUpdateAction.REMOVE);
+ QueryOptions options = new QueryOptions(Constants.ACTIONS, actionMap);
+
+ Query query = new Query()
+ .append(QueryParams.STUDY_UID.key(), studyUid)
+ .append(QueryParams.FILES_UID.key(), fileUid);
+ OpenCGAResult result = get(query, ClinicalAnalysisManager.INCLUDE_CLINICAL_IDS);
+ for (ClinicalAnalysis clinicalAnalysis : result.getResults()) {
+ logger.debug("Removing file references from Clinical Analysis {}", clinicalAnalysis.getId());
+ ClinicalAudit clinicalAudit = new ClinicalAudit("OPENCGA", ClinicalAudit.Action.UPDATE_CLINICAL_ANALYSIS, "File "
+ + file.getString(FileDBAdaptor.QueryParams.PATH.key()) + " was deleted. Remove file references from case.",
+ TimeUtils.getTime());
+ transactionalUpdate(clientSession, clinicalAnalysis, parameters, null, Collections.singletonList(clinicalAudit), options);
+ }
+ }
+
@Override
public OpenCGAResult restore(long id, QueryOptions queryOptions) throws CatalogDBException {
return null;
@@ -1292,17 +1316,18 @@ private Bson parseQuery(Query query, Document extraQuery, String user)
if (queryCopy.containsKey(QueryParams.STUDY_UID.key())
&& (StringUtils.isNotEmpty(user) || queryCopy.containsKey(ParamConstants.ACL_PARAM))) {
Document studyDocument = getStudyDocument(null, queryCopy.getLong(QueryParams.STUDY_UID.key()));
+ boolean simplifyPermissions = simplifyPermissions();
if (queryCopy.containsKey(ParamConstants.ACL_PARAM)) {
andBsonList.addAll(AuthorizationMongoDBUtils.parseAclQuery(studyDocument, queryCopy, Enums.Resource.CLINICAL_ANALYSIS, user,
- configuration));
+ simplifyPermissions));
} else {
if (containsAnnotationQuery(query)) {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user,
- ClinicalAnalysisPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.CLINICAL_ANALYSIS, configuration));
+ ClinicalAnalysisPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.CLINICAL_ANALYSIS, simplifyPermissions));
} else {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user, ClinicalAnalysisPermissions.VIEW.name(),
- Enums.Resource.CLINICAL_ANALYSIS, configuration));
+ Enums.Resource.CLINICAL_ANALYSIS, simplifyPermissions));
}
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/CohortMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/CohortMongoDBAdaptor.java
index c6dd04863de..7f25b1ee7b9 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/CohortMongoDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/CohortMongoDBAdaptor.java
@@ -235,22 +235,21 @@ public OpenCGAResult update(long cohortId, ObjectMap parameters, QueryOptions qu
@Override
public OpenCGAResult update(long cohortUid, ObjectMap parameters, List variableSetList, QueryOptions queryOptions)
throws CatalogDBException, CatalogParameterException, CatalogAuthorizationException {
- Query query = new Query(QueryParams.UID.key(), cohortUid);
- QueryOptions options = new QueryOptions(QueryOptions.INCLUDE,
- Arrays.asList(QueryParams.ID.key(), QueryParams.UID.key(), QueryParams.STUDY_UID.key(),
- QueryParams.SAMPLES.key() + "." + QueryParams.ID.key()));
- OpenCGAResult documentResult = get(query, options);
- if (documentResult.getNumResults() == 0) {
- throw new CatalogDBException("Could not update cohort. Cohort uid '" + cohortUid + "' not found.");
- }
- String cohortId = documentResult.first().getId();
-
try {
- return runTransaction(clientSession -> transactionalUpdate(clientSession, documentResult.first(), parameters, variableSetList,
- queryOptions));
- } catch (CatalogDBException e) {
- logger.error("Could not update cohort {}: {}", cohortId, e.getMessage(), e);
- throw new CatalogDBException("Could not update cohort " + cohortId + ": " + e.getMessage(), e.getCause());
+ return runTransaction(clientSession -> {
+ Query query = new Query(QueryParams.UID.key(), cohortUid);
+ QueryOptions options = new QueryOptions(QueryOptions.INCLUDE,
+ Arrays.asList(QueryParams.ID.key(), QueryParams.UID.key(), QueryParams.STUDY_UID.key(),
+ QueryParams.SAMPLES.key() + "." + QueryParams.ID.key()));
+ OpenCGAResult documentResult = get(clientSession, query, options);
+ if (documentResult.getNumResults() == 0) {
+ throw new CatalogDBException("Could not update cohort. Cohort uid '" + cohortUid + "' not found.");
+ }
+ return transactionalUpdate(clientSession, documentResult.first(), parameters, variableSetList, queryOptions);
+ });
+ } catch (Exception e) {
+ logger.error("Could not update cohort {}: {}", cohortUid, e.getMessage(), e);
+ throw new CatalogDBException("Could not update cohort " + cohortUid + ": " + e.getMessage(), e);
}
}
@@ -879,18 +878,19 @@ private Bson parseQuery(Query query, Document extraQuery, String user)
if (query.containsKey(QueryParams.STUDY_UID.key())
&& (StringUtils.isNotEmpty(user) || query.containsKey(ParamConstants.ACL_PARAM))) {
+ boolean simplifyPermissions = simplifyPermissions();
Document studyDocument = getStudyDocument(null, query.getLong(QueryParams.STUDY_UID.key()));
if (query.containsKey(ParamConstants.ACL_PARAM)) {
andBsonList.addAll(AuthorizationMongoDBUtils.parseAclQuery(studyDocument, query, Enums.Resource.COHORT, user,
- configuration));
+ simplifyPermissions));
} else {
if (containsAnnotationQuery(query)) {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user,
- CohortPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.COHORT, configuration));
+ CohortPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.COHORT, simplifyPermissions));
} else {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user, CohortPermissions.VIEW.name(),
- Enums.Resource.COHORT, configuration));
+ Enums.Resource.COHORT, simplifyPermissions));
}
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FamilyMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FamilyMongoDBAdaptor.java
index 2b7ed748772..9e8c35d00ab 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FamilyMongoDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FamilyMongoDBAdaptor.java
@@ -1191,17 +1191,18 @@ protected Bson parseQuery(Query query, Document extraQuery, String user)
if (query.containsKey(QueryParams.STUDY_UID.key())
&& (StringUtils.isNotEmpty(user) || query.containsKey(ParamConstants.ACL_PARAM))) {
Document studyDocument = getStudyDocument(null, query.getLong(QueryParams.STUDY_UID.key()));
+ boolean simplifyPermissions = simplifyPermissions();
if (query.containsKey(ParamConstants.ACL_PARAM)) {
andBsonList.addAll(AuthorizationMongoDBUtils.parseAclQuery(studyDocument, query, Enums.Resource.FAMILY, user,
- configuration));
+ simplifyPermissions));
} else {
if (containsAnnotationQuery(query)) {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user,
- FamilyPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.FAMILY, configuration));
+ FamilyPermissions.VIEW_ANNOTATIONS.name(), Enums.Resource.FAMILY, simplifyPermissions));
} else {
andBsonList.add(getQueryForAuthorisedEntries(studyDocument, user, FamilyPermissions.VIEW.name(),
- Enums.Resource.FAMILY, configuration));
+ Enums.Resource.FAMILY, simplifyPermissions));
}
}
diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FileMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FileMongoDBAdaptor.java
index 5c3b592e9b9..f214620bf39 100644
--- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FileMongoDBAdaptor.java
+++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/FileMongoDBAdaptor.java
@@ -40,6 +40,7 @@
import org.opencb.opencga.catalog.managers.FileUtils;
import org.opencb.opencga.catalog.managers.SampleManager;
import org.opencb.opencga.catalog.utils.Constants;
+import org.opencb.opencga.catalog.utils.ParamUtils;
import org.opencb.opencga.catalog.utils.ParamUtils.BasicUpdateAction;
import org.opencb.opencga.catalog.utils.UuidUtils;
import org.opencb.opencga.core.api.ParamConstants;
@@ -785,7 +786,8 @@ private UpdateDocument getValidatedUpdateParams(ClientSession clientSession, lon
document.getSet().put(QueryParams.RELATED_FILES.key(), relatedFileDocument);
break;
case REMOVE:
- document.getPullAll().put(QueryParams.RELATED_FILES.key(), relatedFileDocument);
+ List documentList = fixRelatedFilesForRemoval(relatedFileDocument);
+ document.getPull().put(QueryParams.RELATED_FILES.key(), documentList);
break;
case ADD:
document.getAddToSet().put(QueryParams.RELATED_FILES.key(), relatedFileDocument);
@@ -886,6 +888,18 @@ private UpdateDocument getValidatedUpdateParams(ClientSession clientSession, lon
return document;
}
+ private List fixRelatedFilesForRemoval(List relatedFiles) {
+ if (CollectionUtils.isEmpty(relatedFiles)) {
+ return Collections.emptyList();
+ }
+
+ List relatedFilesCopy = new ArrayList<>(relatedFiles.size());
+ for (Document relatedFile : relatedFiles) {
+ relatedFilesCopy.add(new Document("file", new Document("uid", relatedFile.get("file", Document.class).get("uid"))));
+ }
+ return relatedFilesCopy;
+ }
+
@Override
public OpenCGAResult delete(File file) throws CatalogDBException {
throw new UnsupportedOperationException("Use delete passing status field.");
@@ -1007,7 +1021,9 @@ OpenCGAResult