Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.molgenis.data.vcf;
  
  import java.io.File;
 import java.util.List;
 import java.util.Set;
 
 
Repository implementation for vcf files. The filename without the extension is considered to be the entityname
 
 public class VcfRepository extends AbstractRepository
 {
 	private static final Logger logger = Logger.getLogger(VcfRepository.class);
 
 	public static final String CHROM = "#CHROM";
 	public static final String ALT = "ALT";
 	public static final String POS = "POS";
 	public static final String REF = "REF";
 	public static final String FILTER = "FILTER";
 	public static final String QUAL = "QUAL";
 	public static final String ID = "ID";
 	public static final String INTERNAL_ID = "INTERNAL_ID";
 	public static final String INFO = "INFO";
 	public static final String SAMPLES = "SAMPLES_ENTITIES";
 	public static final String NAME = "NAME";
 	public static final String PREFIX = "##";
 
 	public static final AttributeMetaData CHROM_META = new DefaultAttributeMetaData(,
 			.setDescription("The chromosome on which the variant is observed");
 	public static final AttributeMetaData ALT_META = new DefaultAttributeMetaData(,
 			.setDescription("The alternative allele observed");
 	public static final AttributeMetaData POS_META = new DefaultAttributeMetaData(,
 			.setDescription("The position on the chromosome which the variant is observed");
 	public static final AttributeMetaData REF_META = new DefaultAttributeMetaData(,
 			.setDescription("The reference allele");
 	public static final AttributeMetaData FILTER_META = new DefaultAttributeMetaData(,
 	public static final AttributeMetaData QUAL_META = new DefaultAttributeMetaData(,
 	public static final AttributeMetaData ID_META = new DefaultAttributeMetaData(,
 	private final File file;
 	private final String entityName;
 
 	private boolean hasFormatMetaData;
 
 	public VcfRepository(File fileString entityNamethrows IOException
 	{
 		this. = file;
 		this. = entityName;
 	}
 
 	public Iterator<Entityiterator()
 	{
 		final VcfReader vcfReader;
		try
		{
			vcfReader = createVcfReader();
		}
		catch (IOException e)
		{
			throw new RuntimeException(e);
		}
		final VcfReader finalVcfReader = vcfReader;
		return new Iterator<Entity>()
		{
			public boolean hasNext()
			{
			}
			public Entity next()
			{
				Entity entity = null;
				try
				{
					entity = toEntity(getEntityMetaData(), vcfRecordfinalVcfReader.getVcfMeta());
				}
				catch (IOException e)
				{
					.error("Unable to load VCF metadata. " + e.getStackTrace());
				}
				return entity;
			}
			public void remove()
			{
			}
		};
	}
	public Entity toEntity(EntityMetaData emdVcfRecord vcfRecordVcfMeta vcfMetathrows IOException
	{
		Entity entity = new MapEntity(emd);
		entity.set(vcfRecord.getChromosome());
		entity.set(,
				StringUtils.join(Lists.transform(vcfRecord.getAlternateAlleles(), new Function<AlleleString>()
				{
					public String apply(Allele allele)
					{
						return allele.toString();
					}
				}), ','));
		entity.set(vcfRecord.getPosition());
		entity.set(vcfRecord.getReferenceAllele().toString());
		entity.set(vcfRecord.getFilterStatus());
		entity.set(vcfRecord.getQuality());
		entity.set(, StringUtils.join(vcfRecord.getIdentifiers(), ','));
		id.append(StringUtils.strip(entity.get().toString()));
		id.append("_");
		id.append(StringUtils.strip(entity.get().toString()));
		id.append("_");
		id.append(StringUtils.strip(entity.get().toString()));
		id.append("_");
		id.append(StringUtils.strip(entity.get().toString()));
		entity.set(id.toString());
		for (VcfInfo vcfInfo : vcfRecord.getInformation())
		{
			Object val = vcfInfo.getVal();
			if (val instanceof List<?>)
			{
				// TODO support list of primitives datatype
				val = StringUtils.join((List<?>) val',');
			}
			if (val instanceof Float && Float.isNaN((Floatval))
			{
				val = null;
			}
			entity.set(getInfoPrefix() + vcfInfo.getKey(), val);
		}
		{
			List<Entitysamples = new ArrayList<Entity>();
			Iterator<VcfSamplesampleIterator = vcfRecord.getSamples().iterator();
			if (vcfRecord.getNrSamples() > 0)
			{
				Iterator<StringsampleNameIterator = vcfMeta.getSampleNames().iterator();
				for (int j = 0; sampleIterator.hasNext(); ++j)
				{
					String[] format = vcfRecord.getFormat();
					VcfSample sample = sampleIterator.next();
					Entity sampleEntity = new MapEntity();
					for (int i = 0; i < format.lengthi = i + 1)
					{
						sampleEntity.set(format[i], sample.getData(i));
					}
					sampleEntity.set(id.toString() + j);
					// FIXME remove entity ID from Sample label after #1400 is fixed, see also:
					// jquery.molgenis.table.js line 152
					sampleEntity.set(entity.get() + "_" + entity.get() + "_" + sampleNameIterator.next());
					samples.add(sampleEntity);
				}
			}
			entity.set(samples);
		}
		return entity;
	}
	{
		if ( == null)
		{
			try
			{
				VcfReader vcfReader = createVcfReader();
				VcfMeta vcfMeta;
				try
				{
					vcfMeta = vcfReader.getVcfMeta();
					Iterable<VcfMetaFormatformatMetaData = vcfReader.getVcfMeta().getFormatMeta();
				}
				finally
				{
					if (vcfReader != nullvcfReader.close();
				}
				idAttributeMetaData.setNillable(false);
				idAttributeMetaData.setIdAttribute(true);
				idAttributeMetaData.setVisible(false);
				List<AttributeMetaDatametadataInfoField = new ArrayList<AttributeMetaData>();
				for (VcfMetaInfo info : vcfMeta.getInfoMeta())
				{
					attributeMetaData.setDescription(info.getDescription());
					metadataInfoField.add(attributeMetaData);
				}
				infoMetaData.setAttributesMetaData(metadataInfoField);
				{
							"SAMPLES");
					.addAttributeMetaData(samplesAttributeMeta);
				}
			}
			catch (IOException e)
			{
			}
		}
	}

Prefix to make INFO column names safe-ish. For example, 'Samples' is sometimes used as an INFO field and clashes with the 'Samples' key used by Genotype-IO to store sample data in memory. By prefixing a tag we hope to create unique INFO field names that do not clash.

Returns:
	public static String getInfoPrefix()
	{
		return  + "_";
	}
	{
		 = formatMetaData.iterator().hasNext();
		{
			idAttributeMetaData.setIdAttribute(true);
			idAttributeMetaData.setVisible(false);
			nameAttributeMetaData.setLabelAttribute(true).setLookupAttribute(true);
			for (VcfMetaFormat meta : formatMetaData)
			{
				AttributeMetaData attributeMetaData = new DefaultAttributeMetaData(meta.getId(),
			}
		}
	}
	{
		String number = vcfMetaInfo.getNumber();
		boolean isListValue;
		try
		{
			isListValue = number.equals("A") || number.equals("R") || number.equals("G") || number.equals(".")
					|| Integer.parseInt(number) > 1;
		}
		{
			throw new GenotypeDataException("Error parsing length of vcf info field. " + number
" is not a valid int or expected preset (A, R, G, .)"ex);
		}
		switch (vcfMetaInfo.getType())
		{
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			default:
				throw new MolgenisDataException("unknown vcf info type [" + vcfMetaInfo.getType() + "]");
		}
	}
	{
		String number = format.getNumber();
		boolean isListValue;
		try
		{
			isListValue = number.equals("A") || number.equals("R") || number.equals("G") || number.equals(".")
					|| Integer.parseInt(number) > 1;
		}
		{
			throw new GenotypeDataException("Error parsing length of vcf info field. " + number
" is not a valid int or expected preset (A, R, G, .)"ex);
		}
		switch (format.getType())
		{
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			case :
				if (isListValue)
				{
					// TODO support list of primitives datatype
				}
			default:
				throw new MolgenisDataException("unknown vcf field type [" + format.getType() + "]");
		}
	}
	protected VcfReader createVcfReader() throws IOException
	{
		InputStream inputStream = new FileInputStream();
		if (.getName().endsWith(".gz"))
		{
			inputStream = new GZIPInputStream(inputStream);
		}
		VcfReader reader = new VcfReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
		// register reader so close() can close all readers
		return reader;
	}
	public void close() throws IOException
	{
		if ( != null)
		{
			for (VcfReader vcfReader : )
			{
				try
				{
					vcfReader.close();
				}
				catch (IOException e)
				{
					.warn(""e);
				}
			}
		}
	}
	{
		return Collections.emptySet();
	}
	public long count()
	{
		return Iterables.size(this);
	}
New to GrepCode? Check out our FAQ X