Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/DataFile.pm @ 0:1f6dce3d34e0
Uploaded
| author | mahtabm |
|---|---|
| date | Thu, 11 Apr 2013 02:01:53 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1f6dce3d34e0 |
|---|---|
| 1 package Bio::EnsEMBL::DataFile; | |
| 2 | |
| 3 use strict; | |
| 4 use warnings; | |
| 5 | |
| 6 use base qw/Bio::EnsEMBL::Storable/; | |
| 7 | |
| 8 use Bio::EnsEMBL::ApiVersion; | |
| 9 use Bio::EnsEMBL::Utils::Argument qw/rearrange/; | |
| 10 use Bio::EnsEMBL::Utils::Exception qw/throw warning/; | |
| 11 use Bio::EnsEMBL::Utils::Scalar qw/:assert/; | |
| 12 use Bio::EnsEMBL::Utils::URI qw/is_uri/; | |
| 13 use File::Spec; | |
| 14 use Scalar::Util qw(weaken isweak); | |
| 15 | |
| 16 =head2 new | |
| 17 | |
| 18 Arg [-ADAPTOR] : Bio::EnsEMBL::DBSQL::DataFileAdaptor | |
| 19 Arg [-DBID] : Integer $dbID | |
| 20 Arg [-COORD_SYSTEM] : Bio::EnsEMBL::CoordSystem $coord_system | |
| 21 Arg [-ANALYSIS] : Bio::EnsEMBL::Analysis $analysis | |
| 22 Arg [-NAME] : String $name | |
| 23 Arg [-VERSION_LOCK] : Boolean $version_lock | |
| 24 Arg [-ABSOLUTE] : Boolean $absolute | |
| 25 Arg [-URL] : String $url | |
| 26 Arg [-FILE_TYPE] : String $file_type | |
| 27 Example : Bio::EnsEMBL::DataFile->new(); | |
| 28 Description : Returns a new instance of this object | |
| 29 Returntype : Bio::EnsEMBL::DataFile | |
| 30 Exceptions : Thrown if data is not as expected | |
| 31 | |
| 32 =cut | |
| 33 | |
| 34 sub new { | |
| 35 my ($class, @args) = @_; | |
| 36 my $self = $class->SUPER::new(@args); | |
| 37 my ($coord_system, $analysis, $name, $version_lock, $absolute, $url, $file_type) = | |
| 38 rearrange([qw/coord_system analysis name version_lock absolute url file_type/], @args); | |
| 39 | |
| 40 $self->coord_system($coord_system); | |
| 41 $self->analysis($analysis); | |
| 42 $self->name($name); | |
| 43 $self->version_lock($version_lock); | |
| 44 $self->absolute($absolute); | |
| 45 $self->url($url); | |
| 46 $self->file_type($file_type); | |
| 47 | |
| 48 return $self; | |
| 49 } | |
| 50 | |
| 51 =head2 new_fast | |
| 52 | |
| 53 Arg [1] : hashref to be blessed | |
| 54 Description: Construct a new Bio::EnsEMBL::Feature using the hashref. | |
| 55 Exceptions : none | |
| 56 Returntype : Bio::EnsEMBL::Feature | |
| 57 Caller : general, subclass constructors | |
| 58 Status : Stable | |
| 59 | |
| 60 =cut | |
| 61 | |
| 62 sub new_fast { | |
| 63 my $class = shift; | |
| 64 my $hashref = shift; | |
| 65 my $self = bless $hashref, $class; | |
| 66 weaken($self->{adaptor}) if ( ! isweak($self->{adaptor}) ); | |
| 67 return $self; | |
| 68 } | |
| 69 | |
| 70 =head2 get_ExternalAdaptor | |
| 71 | |
| 72 Arg[1] : Scalar; optional base path. Uses defaults if not given | |
| 73 Example : my $ea = $df->get_ExternalAdaptor('/base/path'); | |
| 74 Description : Delegates to the parent adaptor to retrieve the external | |
| 75 adaptor for this data type | |
| 76 Returntype : Adaptor; will be an adaptor that can read the given data file | |
| 77 Exceptions : Thrown if there is no attached adaptor. | |
| 78 | |
| 79 =cut | |
| 80 | |
| 81 sub get_ExternalAdaptor { | |
| 82 my ($self, $base_path) = @_; | |
| 83 my $adaptor = $self->adaptor(); | |
| 84 throw "No DataFileAdaptor found in this object. Cannot request ExternalAdaptor" if ! $adaptor; | |
| 85 return $adaptor->DataFile_to_adaptor($self, $base_path); | |
| 86 } | |
| 87 | |
| 88 =head2 path | |
| 89 | |
| 90 Arg[1] : Scalar base of the path to use. Can be ignored if the instance | |
| 91 already represents a canonical path | |
| 92 Example : my $f = $df->path(); | |
| 93 Description : Used to generate the path to the file resource. Can return a | |
| 94 path to the file or a URL but it is up to the using code to | |
| 95 know how to interprate the different returned forms. | |
| 96 | |
| 97 If the data file url is canonical then this is just returned. | |
| 98 If not then a path is generated of the form | |
| 99 B</base/path/production_name/coord_system_version/[software_version]/db_group/name.ext> | |
| 100 | |
| 101 Returntype : Scalar the absolute path/url to the given resource | |
| 102 Exceptions : Thrown if the linked Coordinate System lacks a version and the | |
| 103 current database also lacks a default version | |
| 104 Caller : public | |
| 105 | |
| 106 =cut | |
| 107 | |
| 108 | |
| 109 sub path { | |
| 110 my ($self, $base) = @_; | |
| 111 my $all_paths = $self->get_all_paths($base); | |
| 112 return $all_paths->[0]; | |
| 113 } | |
| 114 | |
| 115 sub get_all_paths { | |
| 116 my ($self, $base) = @_; | |
| 117 | |
| 118 return [$self->url()] if $self->absolute(); | |
| 119 | |
| 120 my @all_paths; | |
| 121 | |
| 122 $base = $self->adaptor()->get_base_path($base) if ! $base; | |
| 123 | |
| 124 my $production_name = $self->adaptor()->db()->get_MetaContainer()->get_production_name(); | |
| 125 my $cs_version = $self->coord_system()->version(); | |
| 126 if(! $cs_version) { | |
| 127 my ($highest_cs) = @{$self->adaptor()->db()->get_CoordSystemAdaptor()->fetch_all()}; | |
| 128 $cs_version = $highest_cs->version(); | |
| 129 } | |
| 130 if(!$cs_version) { | |
| 131 my $name = $self->name(); | |
| 132 throw "The file '${name}' in species '${$production_name} is attached to a CoordinateSystem lacking a version and has no default assembly. Please fix"; | |
| 133 } | |
| 134 | |
| 135 my @portions; | |
| 136 push(@portions, $production_name); | |
| 137 push(@portions, $cs_version); | |
| 138 push(@portions, software_version()) if $self->version_lock(); | |
| 139 push(@portions, $self->adaptor()->db()->group()); | |
| 140 | |
| 141 #Targets are the files to generate | |
| 142 my @targets; | |
| 143 #If URL is populated we assume we need to add this onto the end but removing the / | |
| 144 if($self->url()) { | |
| 145 my @split = split(/\//, $self->url()); | |
| 146 push(@targets, [@split]); | |
| 147 } | |
| 148 else { | |
| 149 my $extensions = $self->adaptor()->DataFile_to_extensions($self); | |
| 150 foreach my $ext (@{$extensions}) { | |
| 151 my $filename = sprintf(q{%s.%s}, $self->name(), $ext); | |
| 152 push(@targets, [$filename]); | |
| 153 } | |
| 154 } | |
| 155 | |
| 156 my $is_uri = is_uri($base); | |
| 157 foreach my $t (@targets) { | |
| 158 my $path; | |
| 159 if($is_uri) { | |
| 160 $path = join(q{/}, $base, @portions, @{$t}); | |
| 161 } | |
| 162 else { | |
| 163 $path = File::Spec->catfile($base, @portions, @{$t}); | |
| 164 } | |
| 165 push(@all_paths, $path); | |
| 166 } | |
| 167 return \@all_paths; | |
| 168 } | |
| 169 | |
| 170 =head2 coord_system | |
| 171 | |
| 172 Arg[1] : Bio::EnsEMBL::CoordSystem Optional setter | |
| 173 Description : Mutator for the coord system field. All files are linked to one | |
| 174 Returntype : Bio::EnsEMBL::CoordSystem | |
| 175 Exceptions : Thrown if not of the expected type | |
| 176 | |
| 177 =cut | |
| 178 | |
| 179 | |
| 180 sub coord_system { | |
| 181 my ($self, $coord_system) = @_; | |
| 182 if(defined $coord_system) { | |
| 183 assert_ref($coord_system, 'Bio::EnsEMBL::CoordSystem', 'coord_system'); | |
| 184 $self->{'coord_system'} = $coord_system; | |
| 185 } | |
| 186 return $self->{'coord_system'}; | |
| 187 } | |
| 188 | |
| 189 =head2 analysis | |
| 190 | |
| 191 Arg[1] : Bio::EnsEMBL::Analysis Optional setter | |
| 192 Description : Mutator for the analysis field. All files are linked to one | |
| 193 Returntype : Bio::EnsEMBL::Analysis | |
| 194 Exceptions : Thrown if not of the expected type | |
| 195 | |
| 196 =cut | |
| 197 | |
| 198 sub analysis { | |
| 199 my ($self, $analysis) = @_; | |
| 200 if(defined $analysis) { | |
| 201 assert_ref($analysis, 'Bio::EnsEMBL::Analysis', 'analysis'); | |
| 202 $self->{'analysis'} = $analysis; | |
| 203 } | |
| 204 return $self->{'analysis'}; | |
| 205 } | |
| 206 | |
| 207 =head2 name | |
| 208 | |
| 209 Arg[1] : String Optional setter | |
| 210 Description : Mutator for the name of the file. Can be used in file location | |
| 211 generation | |
| 212 Returntype : String | |
| 213 | |
| 214 =cut | |
| 215 | |
| 216 sub name { | |
| 217 my ($self, $name) = @_; | |
| 218 if(defined $name) { | |
| 219 $self->{'name'} = $name; | |
| 220 } | |
| 221 return $self->{'name'}; | |
| 222 } | |
| 223 | |
| 224 =head2 version_lock | |
| 225 | |
| 226 Arg[1] : Boolean Optional setter | |
| 227 Description : Boolean indicating if the file is linked to the version of the | |
| 228 database it was found in. | |
| 229 Returntype : Boolean | |
| 230 | |
| 231 =cut | |
| 232 | |
| 233 sub version_lock { | |
| 234 my ($self, $version_lock) = @_; | |
| 235 if(defined $version_lock) { | |
| 236 assert_boolean($version_lock, 'version_lock'); | |
| 237 $self->{'version_lock'} = $version_lock; | |
| 238 } | |
| 239 return $self->{'version_lock'}; | |
| 240 } | |
| 241 | |
| 242 =head2 absolute | |
| 243 | |
| 244 Arg[1] : Boolean Optional setter | |
| 245 Description : Indicates if the URL of this file is an absolute one i.e. | |
| 246 should be used verbatim or not. | |
| 247 Returntype : Boolean | |
| 248 | |
| 249 =cut | |
| 250 | |
| 251 sub absolute { | |
| 252 my ($self, $absolute) = @_; | |
| 253 if(defined $absolute) { | |
| 254 assert_boolean($absolute, 'absolute'); | |
| 255 $self->{'absolute'} = $absolute; | |
| 256 } | |
| 257 return $self->{'absolute'}; | |
| 258 } | |
| 259 | |
| 260 =head2 url | |
| 261 | |
| 262 Arg[1] : String Optional setter | |
| 263 Description : Location of the file. Can be optional and if set means once | |
| 264 we are in an automatic location use this value to locate | |
| 265 the file. | |
| 266 Returntype : String | |
| 267 | |
| 268 =cut | |
| 269 | |
| 270 sub url { | |
| 271 my ($self, $url) = @_; | |
| 272 $self->{'url'} = $url if defined $url; | |
| 273 return $self->{'url'}; | |
| 274 } | |
| 275 | |
| 276 =head2 file_type | |
| 277 | |
| 278 Arg[1] : String Optional setter | |
| 279 Description : The type of file we are working with. Can be used to generate | |
| 280 a file name. | |
| 281 Returntype : String | |
| 282 | |
| 283 =cut | |
| 284 | |
| 285 sub file_type { | |
| 286 my ($self, $file_type) = @_; | |
| 287 $self->{'file_type'} = $file_type if defined $file_type; | |
| 288 return $self->{'file_type'}; | |
| 289 } | |
| 290 | |
| 291 #=head2 files | |
| 292 # | |
| 293 # Args : | |
| 294 # Example : my $files = @{$df->files()}; | |
| 295 # Description : Returns all the file names we expect to cover for a flat file | |
| 296 # Returntype : type return_description | |
| 297 # Exceptions : | |
| 298 # Caller : caller | |
| 299 # Status : status | |
| 300 # | |
| 301 #=cut | |
| 302 # | |
| 303 # | |
| 304 #sub files { | |
| 305 # my ($self) = @_; | |
| 306 # | |
| 307 #} | |
| 308 | |
| 309 1; |
