diff variant_effect_predictor/Bio/EnsEMBL/Utils/IO/FeatureSerializer.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/Utils/IO/FeatureSerializer.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,91 @@
+=pod
+
+=head1 LICENSE
+
+  Copyright (c) 1999-2012 The European Bioinformatics Institute and
+  Genome Research Limited.  All rights reserved.
+
+  This software is distributed under a modified Apache license.
+  For license details, please see
+
+  http://www.ensembl.org/info/about/code_licence.html
+
+=head1 NAME
+
+FeatureSerializer - An abstract serializer for turning EnsEMBL Features into other formats
+
+=head1 AUTHOR
+
+Kieron Taylor, 2012 - ktaylor@ebi.ac.uk
+
+=head1 SYNOPSIS
+
+my $serializer = new Bio::EnsEMBL::Utils::IO::FeatureSerializer( $filehandle );
+$serializer->print_feature_list( \@list_of_features );
+
+=head1 DESCRIPTION
+
+Generic class for serializing features Subclass this class to create a 
+format-specific serializer. Be sure to implement print_feature at the 
+bare minimum
+
+=cut
+
+package Bio::EnsEMBL::Utils::IO::FeatureSerializer;
+
+use strict;
+use warnings;
+
+use base qw(Bio::EnsEMBL::Utils::IO::Serializer);
+
+# Majority of methods inherited from Serializer
+
+sub print_feature {
+	throw( "print_feature method not implemented.");
+}
+
+=head2 print_feature_list
+
+	Arg [1]    : Listref of Features
+	Description: Run print_feature on every feature in the list
+
+=cut
+
+sub print_feature_list {
+	my $self = shift;
+	my $feature_list = shift;
+	if (ref($feature_list) eq 'ARRAY') {
+		if (scalar(@$feature_list) > 0) {$self->{'achieved_something'} = 1;} 
+		foreach my $feature (@{$feature_list}) {
+			$self->print_feature($feature);
+		}
+	}
+	else {
+		throw( "print_feature_list requires a listref as argument" );
+	}
+}
+
+=head2 print_feature_Iterator
+
+	Arg [1]    : Bio::EnsEMBL::Utils::Iterator
+	Description: Automatically spools through an iterator for convenience
+	Returntype : None
+=cut
+
+sub print_feature_Iterator {
+	my $self = shift;
+	my $iterator = shift;
+	if ($iterator->can('has_next')) {
+		$iterator->each(
+			sub {
+				$self->print_feature($_); 
+				$self->{'achieved_something'} = 1;
+			}
+		);
+	}
+	else {
+		throw("Supplied iterator does not look like Bio::EnsEMBL::Utils::Iterator");
+	}
+}
+
+1;