Skip to content

Commit

Permalink
Remove dependency on field_metadata.json (#49)
Browse files Browse the repository at this point in the history
* chore:remove dependency on field_metadata.json

* chore:bump vip-utils 1.4.5 to 1.4.6, bump version 3.0.1 to 3.0.2

* fix VepMetadataServiceFactoryImpl
  • Loading branch information
dennishendriksen authored Jan 26, 2024
1 parent c0f1fea commit 0212380
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 45 deletions.
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<version>3.2.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>org.molgenis</groupId>
<artifactId>vip-inheritance-matcher</artifactId>
<version>3.0.1</version>
<version>3.0.2</version>

<name>vip-inheritance-matcher</name>
<description>Annotates VCF samples with mendelian violation and possible compound flags and
Expand Down Expand Up @@ -46,8 +46,8 @@
<commons.cli.version>1.6.0</commons.cli.version>
<!-- [WARNING] Plugin validation issues were detected, see https://github.com/jacoco/jacoco/issues/1435 -->
<jacoco-maven-plugin.version>0.8.11</jacoco-maven-plugin.version>
<samtools.htsjdk.version>4.0.2</samtools.htsjdk.version>
<vip.utils.version>1.4.5</vip.utils.version>
<samtools.htsjdk.version>4.1.0</samtools.htsjdk.version>
<vip.utils.version>2.0.0</vip.utils.version>
</properties>

<profiles>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,24 @@
package org.molgenis.vcf.inheritance.matcher;

import static java.util.Objects.requireNonNull;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_DEBUG;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_FORCE;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_INPUT;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_OUTPUT;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_PED;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.OPT_PROBANDS;
import static org.molgenis.vcf.inheritance.matcher.PathUtils.parsePaths;

import ch.qos.logback.classic.Level;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.*;
import org.molgenis.vcf.inheritance.matcher.model.Settings;
import org.molgenis.vcf.inheritance.matcher.util.InheritanceServiceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static java.util.Objects.requireNonNull;
import static org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.*;
import static org.molgenis.vcf.inheritance.matcher.PathUtils.parsePaths;

@Component
class AppCommandLineRunner implements CommandLineRunner {

Expand All @@ -37,15 +30,15 @@ class AppCommandLineRunner implements CommandLineRunner {
private final String appName;
private final String appVersion;
private final CommandLineParser commandLineParser;
private final InheritanceService inheritanceService;
private final InheritanceServiceFactory inheritanceServiceFactory;

AppCommandLineRunner(
@Value("${app.name}") String appName,
@Value("${app.version}") String appVersion,
InheritanceService inheritanceService) {
InheritanceServiceFactory inheritanceServiceFactory) {
this.appName = requireNonNull(appName);
this.appVersion = requireNonNull(appVersion);
this.inheritanceService = requireNonNull(inheritanceService);
this.inheritanceServiceFactory = requireNonNull(inheritanceServiceFactory);
this.commandLineParser = new DefaultParser();
}

Expand Down Expand Up @@ -76,6 +69,7 @@ public void run(String... args) {
CommandLine commandLine = getCommandLine(args);
org.molgenis.vcf.inheritance.matcher.AppCommandLineOptions.validateCommandLine(commandLine);
Settings settings = mapSettings(commandLine);
InheritanceService inheritanceService = inheritanceServiceFactory.create();
try {
inheritanceService.run(settings);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package org.molgenis.vcf.inheritance.matcher;

import static java.lang.String.format;
import static java.util.Collections.singletonMap;
import static org.molgenis.vcf.inheritance.matcher.InheritanceMatcher.matchInheritance;
import static org.molgenis.vcf.utils.sample.mapper.PedToSamplesMapper.mapPedFileToPedigrees;

import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import htsjdk.variant.vcf.VCFFileReader;
import htsjdk.variant.vcf.VCFHeader;
import org.molgenis.vcf.inheritance.matcher.checker.ArCompoundChecker;
import org.molgenis.vcf.inheritance.matcher.model.*;
import org.molgenis.vcf.inheritance.matcher.util.InheritanceUtils;
import org.molgenis.vcf.utils.metadata.FieldMetadataService;
import org.molgenis.vcf.utils.sample.model.*;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
Expand All @@ -19,19 +20,11 @@
import java.util.List;
import java.util.Map;

import org.molgenis.vcf.inheritance.matcher.checker.*;
import org.molgenis.vcf.inheritance.matcher.model.*;
import org.molgenis.vcf.inheritance.matcher.util.InheritanceUtils;
import org.molgenis.vcf.utils.metadata.FieldMetadataService;
import org.molgenis.vcf.utils.sample.model.AffectedStatus;
import org.molgenis.vcf.utils.sample.model.Pedigree;
import org.molgenis.vcf.utils.sample.model.Person;
import org.molgenis.vcf.utils.sample.model.Sample;
import org.molgenis.vcf.utils.sample.model.Sex;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
import static java.lang.String.format;
import static java.util.Collections.singletonMap;
import static org.molgenis.vcf.inheritance.matcher.InheritanceMatcher.matchInheritance;
import static org.molgenis.vcf.utils.sample.mapper.PedToSamplesMapper.mapPedFileToPedigrees;

public class InheritanceService {

private final FieldMetadataService fieldMetadataService;
Expand All @@ -40,8 +33,7 @@ public class InheritanceService {
private final PedigreeInheritanceChecker pedigreeInheritanceChecker;

public InheritanceService(
Annotator annotator, @Qualifier("vepMetadataService")
FieldMetadataService fieldMetadataService, PedigreeInheritanceChecker pedigreeInheritanceChecker) {
Annotator annotator, FieldMetadataService fieldMetadataService, PedigreeInheritanceChecker pedigreeInheritanceChecker) {
this.annotator = annotator;
this.fieldMetadataService = fieldMetadataService;
this.pedigreeInheritanceChecker = pedigreeInheritanceChecker;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.molgenis.vcf.inheritance.matcher.util;

import org.molgenis.vcf.inheritance.matcher.InheritanceService;

public interface InheritanceServiceFactory {
InheritanceService create();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.molgenis.vcf.inheritance.matcher.util;

import org.molgenis.vcf.inheritance.matcher.Annotator;
import org.molgenis.vcf.inheritance.matcher.InheritanceService;
import org.molgenis.vcf.inheritance.matcher.PedigreeInheritanceChecker;
import org.springframework.stereotype.Component;

import static java.util.Objects.requireNonNull;

/**
* Quirky class to enable use of local {@link org.molgenis.vcf.utils.vep.VepMetadataService}
*/
@Component
public class InheritanceServiceFactoryImpl implements InheritanceServiceFactory {
private final Annotator annotator;
private final VepMetadataServiceFactory vepMetadataServiceFactory;
private final PedigreeInheritanceChecker pedigreeInheritanceChecker;

public InheritanceServiceFactoryImpl(Annotator annotator, VepMetadataServiceFactory vepMetadataServiceFactory, PedigreeInheritanceChecker pedigreeInheritanceChecker) {
this.annotator = requireNonNull(annotator);
this.vepMetadataServiceFactory = requireNonNull(vepMetadataServiceFactory);
this.pedigreeInheritanceChecker = requireNonNull(pedigreeInheritanceChecker);
}

@Override
public InheritanceService create() {
return new InheritanceService(annotator, vepMetadataServiceFactory.create(), pedigreeInheritanceChecker);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.molgenis.vcf.inheritance.matcher.util;

import org.molgenis.vcf.utils.metadata.FieldMetadataService;

public interface VepMetadataServiceFactory {
FieldMetadataService create();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.molgenis.vcf.inheritance.matcher.util;

import htsjdk.variant.vcf.VCFInfoHeaderLine;
import org.molgenis.vcf.utils.metadata.FieldMetadataService;
import org.molgenis.vcf.utils.metadata.AbstractFieldMetadataService;
import org.molgenis.vcf.utils.model.FieldMetadata;
import org.molgenis.vcf.utils.vep.VepMetadataService;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;

import static java.nio.charset.StandardCharsets.UTF_8;

/**
* Quirky class to enable reuse of {@link VepMetadataService} from vip-utils
*/
@Component
public class VepMetadataServiceFactoryImpl implements VepMetadataServiceFactory {

@Override
public FieldMetadataService create() {
return new VepMetadataService(new EmptyFieldMetadataService());
}

/**
* vip-inheritance-matcher does not require knowledge of custom VEP metadata
*/
static class EmptyFieldMetadataService extends AbstractFieldMetadataService {
private static final String EMPTY_METADATA_JSON = """
{
"format": {
},
"info": {
"CSQ": {
"nestedFields": {
}
}
}
}
""";

@Override
public FieldMetadata load(VCFInfoHeaderLine vcfInfoHeaderLine) {
return this.load(new ByteArrayInputStream(EMPTY_METADATA_JSON.getBytes(UTF_8)), vcfInfoHeaderLine);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.molgenis.vcf.inheritance.matcher.util;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.molgenis.vcf.inheritance.matcher.Annotator;
import org.molgenis.vcf.inheritance.matcher.PedigreeInheritanceChecker;

import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
class InheritanceServiceFactoryImplTest {
@Mock
private Annotator annotator;
@Mock
private VepMetadataServiceFactory vepMetadataServiceFactory;
@Mock
private PedigreeInheritanceChecker pedigreeInheritanceChecker;
private InheritanceServiceFactoryImpl inheritanceServiceFactoryImpl;
@BeforeEach
void setUp() {
inheritanceServiceFactoryImpl = new InheritanceServiceFactoryImpl(annotator, vepMetadataServiceFactory, pedigreeInheritanceChecker);
}
@Test
void create() {
inheritanceServiceFactoryImpl.create();
verify(vepMetadataServiceFactory).create();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.molgenis.vcf.inheritance.matcher.util;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class VepMetadataServiceFactoryImplTest {
private VepMetadataServiceFactoryImpl vepMetadataServiceFactoryImpl;

@BeforeEach
void setUp() {
vepMetadataServiceFactoryImpl = new VepMetadataServiceFactoryImpl();
}

@Test
void create() {
// test that no exception is thrown
vepMetadataServiceFactoryImpl.create();
}
}

0 comments on commit 0212380

Please sign in to comment.