releasing/cbrtools/perl/CatData.pm
changeset 602 3145852acc89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CatData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,192 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package CatData;
+
+use strict;
+use Data::Dumper;
+use MrpData;
+use PathData;
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+
+  my $iniData = shift;
+  my $fileToWriteTo = shift;
+  my $mrpData = shift;
+  my $category = shift;
+  
+  $self->{data}->{category} = $category;
+
+  foreach my $exportfile (keys %{$mrpData->ExportInfoForCat($category)}) {
+    my $destination = $mrpData->ExportSourceFileInfoForCat($category, $exportfile);
+
+    # Consider any mappings if defined in the reltools.ini file
+    if($iniData->HasMappings()){
+      $destination = $iniData->PerformReverseMapOnFileName($destination);
+      $destination = Utils::RemoveSourceRoot($destination);
+    }
+    $self->{data}->{exportinfo}->{$exportfile} = $destination;
+  }
+  
+  # Used to write infomation store to to file named $fileToWriteTo
+  $self->WriteToFile($fileToWriteTo);
+}
+
+sub Open {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{comp} = shift;
+  $self->{ver} = shift;
+  $self->{category} = shift;
+  $self->ReadFromFile();
+  return $self;
+}
+
+sub Category {
+  my $self = shift;
+  die unless exists $self->{data}->{category};
+  return $self->{data}->{category};
+}
+
+sub ExportInfo {
+  my $self = shift;
+  die unless exists $self->{data}->{exportinfo};
+  return $self->{data}->{exportinfo};
+}
+
+sub ExportSource {
+  my $self = shift;
+  my $destination = shift;
+  die unless exists $self->{data}->{exportinfo}->{$destination};
+  return $self->{data}->{exportinfo}->{$destination};
+}
+
+#
+# Private.
+#
+
+sub WriteToFile {
+  my $self = shift;
+  my $fileToWriteTo = shift;
+  
+  if (-e $fileToWriteTo) {
+    Utils::SetFileWritable($fileToWriteTo);
+  }
+  open (OUT, ">$fileToWriteTo") or die "Error: Couldn't open \"$fileToWriteTo\" for writing: $!\n";
+  print OUT Data::Dumper->Dump([$self->{data}], ['self->{data}']);
+  close (OUT);
+  Utils::SetFileReadOnly($fileToWriteTo);
+}
+
+sub ReadFromFile {
+  my $self = shift;
+  my $category = $self->{category};
+  my $pathData = $self->{iniData}->PathData;
+  my $comp = $self->{comp};
+  my $ver = $self->{ver};
+  
+  my $relDir = $pathData->LocalArchivePathForExistingComponent($comp, $ver);
+  die "Error: \"$comp $ver\" does not exist\n" unless $relDir;
+  if (!-e "$relDir\\exports$category.txt") {
+    print "Info: Can't find \"$relDir\\exports$category.txt\" \"$comp $ver\" is an incompatible release\n";
+  }
+  else{
+    $self->{project} = $pathData->ComponentProject($comp, $ver);
+    unless (-e $relDir) {
+      die "Error: $comp $ver does not exist\n";
+    }
+    my $file = "$relDir\\exports$category.txt";
+
+    open (IN, $file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+    local $/ = undef;
+    my $data = <IN>;
+    die "Error: Reldata in \"$relDir\" is blank" unless $data =~ (m/\S/);
+    eval ($data) or die "Error: Couldn't parse reldata in \"$relDir\"\n";
+    close (IN);
+  }
+}
+
+1;
+
+=head1 NAME
+
+CatData.pm - Provides an interface to data associated with categories for a release.
+
+=head1 DESCRIPTION
+
+Stores the source and export location of export files in a release. All information is stored in a single file named F<catdata> within the release directory using the module Data::Dumper.
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a new C<CatData> object and corresponding data file. Expects to be passed a filename to write to, a C<MrpData> reference, and a category.
+
+=head2 Open
+
+Creates a C<CatData> object from an existing data file. Expects to be passed an C<IniData> reference, a component name, a version and a category.
+
+=head2 Category
+
+Returns the category value.
+
+=head2 ExportInfo
+
+Returns the exportinfo.
+
+=head2 ExportSource
+
+Expects an export destination. Returns the export source location.
+
+=head2 WriteToFile
+
+Expects to be passed a filename which is used to write a F<catdata>.
+
+=head2 ReadFromFile
+
+Enables a F<catdata> file to be read so that all infomation contained can be read.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut