releasing/cbrtools/perl/ExportData.pm
author marvin shi <marvin.shi@nokia.com>
Wed, 17 Nov 2010 14:05:07 +0800
changeset 691 9eeecb73a5d4
parent 602 3145852acc89
permissions -rw-r--r--
fix ou1cimx1#651819
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     1
# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     2
# All rights reserved.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     3
# This component and the accompanying materials are made available
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     4
# under the terms of the License "Eclipse Public License v1.0"
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     5
# which accompanies this distribution, and is available
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     7
# 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     8
# Initial Contributors:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    10
# 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    11
# Contributors:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    12
# 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    13
# Description:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    14
# 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    15
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    16
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    17
package ExportData;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    18
use strict;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    19
use Utils;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    20
use IniData;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    21
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    22
use constant BIN_KEYS => 0;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    23
use constant RELDATA_KEYS => 1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    24
use constant EXP_KEYS => 2;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    25
use constant SRC_KEYS => 3;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    26
use constant SRC_EXP_KEYS => 4;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    27
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    28
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    29
# Constructor
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    30
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    31
sub New {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    32
  my $invocant = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    33
  my $class = ref($invocant) || $invocant;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    34
  my %args = @_;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    35
  my $self = {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    36
	      exportsFile => $args{exports_file},
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    37
	      verbose => $args{verbose},
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    38
	      iniData => IniData->New(),
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    39
	     };
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    40
  bless $self, $class;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    41
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    42
  $self->ParseExportData();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    43
  return $self;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    44
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    45
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    46
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    47
# Public
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    48
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    49
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    50
sub PgpKeysForSource {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    51
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    52
  my $component = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    53
  my $category = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    54
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    55
  return $self->ReconstructData($component, SRC_KEYS, $category);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    56
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    57
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    58
sub PgpKeysForBinaries {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    59
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    60
  my $component = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    61
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    62
  return $self->ReconstructData($component, BIN_KEYS);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    63
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    64
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    65
sub PgpKeysForExports {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    66
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    67
  my $component = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    68
  my $category = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    69
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    70
  return $self->ReconstructData($component, EXP_KEYS, $category);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    71
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    72
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    73
sub PgpKeysForRelData {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    74
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    75
  my $component = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    76
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    77
  return $self->ReconstructData($component, RELDATA_KEYS);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    78
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    79
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    80
sub AllPgpKeys {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    81
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    82
  if (exists $self->{pgpKeys}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    83
    return $self->{pgpKeys};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    84
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    85
  return [];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    86
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    87
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    88
sub ExportableComponents {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    89
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    90
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    91
  if (exists $self->{components}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    92
    return $self->{components};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    93
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    94
  return [];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    95
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    96
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    97
sub ComponentIsExportable {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    98
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    99
  my $comp = lc(shift);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   100
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   101
  foreach my $exportableComp (@{$self->ExportableComponents()}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   102
    if ($comp eq lc($exportableComp)) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   103
      return 1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   104
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   105
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   106
  return 0;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   107
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   108
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   109
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   110
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   111
# Private
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   112
#
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   113
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   114
sub ParseExportData {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   115
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   116
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   117
  unless ($self->{exportsFile}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   118
    die "Error: Export data filename not defined\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   119
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   120
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   121
  open EXPORTS, "$self->{exportsFile}" or die "Error: Unable to open $self->{exportsFile} for reading\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   122
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   123
  if ($self->{verbose}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   124
    print "Parsing export data file $self->{exportsFile} ...\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   125
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   126
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   127
  my $separator = $self->{iniData}->CsvSeparator();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   128
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   129
  my $firstRow = 1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   130
  while (my $row = <EXPORTS>) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   131
    chomp $row;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   132
    if ($row =~ /^\s*$/ or $row =~ /^[$separator]*#/) {next;}  #ignore empty rows in table
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   133
    #handle first non empty row
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   134
    if ($firstRow) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   135
      $self->HandleFirstRow($row);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   136
      $firstRow = 0;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   137
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   138
    #handle subsequent non empty rows
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   139
    else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   140
      $self->HandleRow($row);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   141
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   142
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   143
  close EXPORTS;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   144
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   145
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   146
sub HandleFirstRow {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   147
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   148
  my $row = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   149
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   150
  #parse row of delimiter-separated values
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   151
  my @cols = $self->ParseCSV($row);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   152
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   153
  for (my $i = 1; $i <= $#cols; ++$i) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   154
    my $cell = $cols[$i];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   155
    if (defined $cell) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   156
      Utils::StripWhiteSpace(\$cell);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   157
      my ($pgpKeyid) = ($cell =~ /\b(0X[0-9a-fA-F]{8})\b/i);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   158
      unless ($pgpKeyid) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   159
	die "Error: PGP key ID of the correct format not defined in column header \"$cell\"\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   160
      }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   161
      push @{$self->{pgpKeys}}, $pgpKeyid;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   162
      push @{$self->{nonemptyColumns}} ,$i;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   163
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   164
    else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   165
      die "Error: Undefined PGP key in ".$self->{exportsFile}." file.\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   166
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   167
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   168
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   169
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   170
sub HandleRow {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   171
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   172
  my $row = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   173
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   174
  $row = lc($row);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   175
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   176
  #parse row of delimiter-separated values
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   177
  my @cols = $self->ParseCSV($row);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   178
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   179
  my $component = $cols[0];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   180
  Utils::StripWhiteSpace(\$component);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   181
  if ($component =~ /^\s*$/) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   182
    die "Error: Export table has wrong format. Must have component name in first column.\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   183
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   184
  push @{$self->{components}}, $component;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   185
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   186
  #iterate over columns which have a nonempty recipient heading and store cell data
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   187
  my @cells = @cols[@{$self->{nonemptyColumns}}];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   188
  for (my $j = 0; $j < @cells; ++$j) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   189
    $self->HandleCell($component, $j, $cells[$j]); #$j is the PGP array index
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   190
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   191
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   192
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   193
sub HandleCell {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   194
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   195
  my $component = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   196
  my $pgpKeyIndex = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   197
  my $cell = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   198
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   199
  my $pgpKey = $self->{pgpKeys}->[$pgpKeyIndex];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   200
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   201
  # cell must not be undef but may be blank
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   202
  if (!defined $cell) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   203
    $cell = '';
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   204
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   205
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   206
  if ($cell =~ /exclude(?!_)/i) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   207
    # Cells containing 'exclude' must not have _any_ release files of this
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   208
    # component exported to this recipient.  However if only you want to stop
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   209
    # binaries, use exclude_bin
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   210
    return;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   211
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   212
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   213
  # Other cells must have the recipient's key added to 'relDataPgpKeys' and
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   214
  # possibly also 'srcPgpKeys', 'expPgpKeys or 'binPgpKeys' for this component.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   215
  # Concatenating the string save memory, over using an array
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   216
  $self->{keys}->{$component}->[RELDATA_KEYS] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   217
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   218
  # Include binaries unless 'exclude_bin'
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   219
  if ( $cell !~ s/exclude_bin//i ) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   220
    $self->{keys}->{$component}->[BIN_KEYS] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   221
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   222
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   223
  # Identify any S() or E() blocks
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   224
  my %blocks;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   225
  while ($cell =~ s/([a-z])\((.*?)\)//i) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   226
    if (!defined $blocks{$1}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   227
      $blocks{$1} = [$1, $2];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   228
    } else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   229
      die "Error: Export table has wrong format. Multiple $1() blocks found in cell for component '$component', PGP key '$pgpKey'\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   230
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   231
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   232
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   233
  foreach my $block (keys(%blocks)) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   234
    my ($origblock, $cats) = @{$blocks{$block}};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   235
    my $type;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   236
    if ($block eq "s") {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   237
      $type = SRC_KEYS;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   238
    } elsif ($block eq "e") {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   239
      $type = EXP_KEYS;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   240
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   241
    if (defined $type) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   242
      while ($cats =~ s/([a-z]-[a-z]|\S)//i) { # a letter range (e.g. A-Z) or any non whitespace character
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   243
        my $cat = $1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   244
        
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   245
        if ($cat =~ /(.)-(.)/) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   246
          my ($from, $to) = ($1, $2);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   247
      
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   248
          foreach my $cat (ord($from)..ord($to)) { # convert the characters to numbers so that we can do a foreach on the range
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   249
            $cat -= 96;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   250
            $self->{keys}->{$component}->[$type]->[$cat] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   251
          }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   252
        }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   253
        elsif ($cat =~ /^[a-z]$/i) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   254
          $cat = ord($cat) - 96;         
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   255
          $self->{keys}->{$component}->[$type]->[$cat] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   256
        } else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   257
          die "Error: Export table has wrong format. '$cat' is not a valid IPR category in cell for component '$component', PGP key '$pgpKey'\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   258
        }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   259
      }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   260
    } else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   261
      die "Error: Export table has wrong format. '$origblock()' is not a valid construct in cell for component '$component', PGP key '$pgpKey'\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   262
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   263
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   264
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   265
  # Handle any 'old format' IPR categories not in blocks
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   266
  while ($cell =~ s/([a-z]-[a-z]|\S)//i) { # a letter range (e.g. A-Z) or any non whitespace character
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   267
    my $cat = $1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   268
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   269
    if ($cat =~ /(.)-(.)/) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   270
      my ($from, $to) = ($1, $2);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   271
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   272
      foreach my $cat (ord($from)..ord($to)) { # convert the characters to numbers so that we can do a foreach on the range
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   273
        $cat -= 96;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   274
        $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$cat] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   275
      }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   276
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   277
    elsif ($cat !~ /^[a-z]$/i) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   278
      die "Error: Export table has wrong format. '$cat' is not a valid IPR category in cell for component '$component', PGP key '$pgpKey'\n";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   279
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   280
    else {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   281
      $cat = ord($cat) - 96;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   282
      $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$cat] .= "$pgpKeyIndex,";
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   283
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   284
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   285
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   286
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   287
sub ParseCSV {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   288
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   289
  my $text = shift;      # record containing delimited-separated values
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   290
  my @new ;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   291
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   292
  my $separator = $self->{iniData}->CsvSeparator();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   293
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   294
  while ($text =~ m{"([^\"\\]*(?:\\.[^\"\\]*)*)"$separator?|([^$separator]+)$separator?|$separator}gx) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   295
    push(@new, $+);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   296
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   297
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   298
  push(@new, undef) if substr($text, -1,1) eq $separator;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   299
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   300
  return @new;      # list of values that were delimited-separated
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   301
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   302
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   303
sub ReconstructData {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   304
  my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   305
  my $component = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   306
  my $type = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   307
  my $category = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   308
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   309
  if ($category) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   310
    $category = ord($category) - 96;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   311
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   312
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   313
  if (defined $self->{keys}->{$component}) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   314
    my @results;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   315
    my @pgpKeysIndex;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   316
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   317
    if ($type == EXP_KEYS || $type == SRC_KEYS) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   318
      # Gets a list of the src or export keys, as well as the list of keys in both source and exports.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   319
      # Splits the key indexes on ,
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   320
      if (defined $self->{keys}->{$component}->[$type]->[$category]) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   321
        @pgpKeysIndex = split /,/, $self->{keys}->{$component}->[$type]->[$category];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   322
      }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   323
      if (defined $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$category]) {
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   324
        push @pgpKeysIndex, split /,/, $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$category];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   325
      }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   326
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   327
    else { # BIN or RELDATA
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   328
      @pgpKeysIndex = split /,/, $self->{keys}->{$component}->[$type]
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   329
    }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   330
    
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   331
    @results = map $self->{pgpKeys}->[$_], @pgpKeysIndex;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   332
    return \@results;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   333
  }
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   334
  
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   335
  return [];
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   336
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   337
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   338
1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   339
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   340
__END__
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   341
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   342
=head1 NAME
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   343
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   344
ExportData.pm - Provides an interface to the contents of the project's export data file.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   345
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   346
=head1 DESCRIPTION
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   347
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   348
A module used for accessing export restriction information for a component release.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   349
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   350
=head1 INTERFACE
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   351
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   352
=head2 New
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   353
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   354
Passed a named parameter list in the form of hash key value pairs:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   355
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   356
 exportsFile => $export_data_filename
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   357
 verbose     => $integer_verbosity_value
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   358
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   359
Opens and parses the export data file which should contain lines of delimiter separated values representing a table of component name rows and recipient columns, as in the example below:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   360
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   361
             | pgpkeyid_1 (recipient) | pgpkeyid_2 (recipient) | pgpkeyid_3 (recipient) |
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   362
 ------------+------------------------+------------------------+------------------------+--
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   363
 component_1 |           DE           |            E           |          CDE           |
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   364
 ------------+------------------------+------------------------+------------------------+--
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   365
 component_2 |          S(CDE) E(DE)  |                        |           DE           |
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   366
 ------------+------------------------+------------------------+------------------------+--
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   367
 component_3 |           D-G  T       |           A-F          |         exclude        |
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   368
 ------------+------------------------+------------------------+------------------------+--
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   369
 component_4 |  exclude_bin DEFG      |       DEFG             |       DEFG             |
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   370
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   371
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   372
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   373
The column headers must contain the recipients PGP key ID - an eight digit hexadecimal number preceeded by C<0x> (e.g C<0xD9A2CE15>). This public PGP key will be used to encrypt all files sent to the recipient. The name of the recipient may also be included in the column header although this is not mandatory.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   374
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   375
A cell contains a list of IPR categories available to the recipient of the component.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   376
 Each category must be a single letter or digit or a range (e.g. A-Z). Empty cells imply that the recipient
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   377
 does not have access to any source for the corresponding component but can still receive
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   378
binaries.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   379
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   380
Alternatively, different categories may be specified for source files and export files, using the S(...) and E(...) notations respectively, with '...' being a list of IPR categories.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   381
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   382
To prevent a recipient from receiving both source and binaries for the corresponding component, use the keyword C<exclude>. This can be useful when certain recipients may receive releases of some but not all components.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   383
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   384
To prevent a recipient from receiving binaries for the corresponding component, use the keyword C<exclude_bin>. Unlike C<exclude>, this does not break any environment.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   385
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   386
Components which are not listed in the table but exist on the local site will not be exported to any recipients. However, a warning will be issued to alert the exporter of this situation.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   387
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   388
If a licensee or third party does not use C<DISTRIBUTION.POLICY> files to categorize source then all source will have the category X. In this case, putting X in a cell implies that all source for that component will be sent to the recipient, otherwise none will be sent.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   389
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   390
Lines starting with a C<#> are treated as comments and ignored.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   391
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   392
[NOTE: It is recommended that this file is created and maintained using a spreadsheet
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   393
application (saving as a CSV file) rather than editing it directly.]
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   394
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   395
If your CSV file does not use a comma ',' as the separator you will need to specify the required
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   396
separator in your reltools.ini, using the syntax F<csv_separator <separator>>, e.g. F<csv_separator ;>.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   397
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   398
=head2 PgpKeysForRelData
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   399
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   400
Expects a component name. Returns a reference to an array of public PGP key ids (corresponding to different
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   401
recipients) to be used to encrypt the component's reldata.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   402
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   403
=head2 PgpKeysForSource
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   404
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   405
Expects a component name and a source category. Returns a reference to an array of public PGP
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   406
 key ids (corresponding to different recipients) to be used to encrypt the component's source of
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   407
 this category.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   408
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   409
=head2 PgpKeysForBinaries
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   410
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   411
Expects a component name. Returns a reference to an array of public PGP key ids (corresponding to different
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   412
recipients) to be used to encrypt the component's binaries.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   413
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   414
=head2 PgpKeysForExports
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   415
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   416
Expects a component name and an IPR category. Returns a reference to an array of public PGP
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   417
 key ids (corresponding to different recipients) to be used to encrypt the component's exports of
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   418
 this category.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   419
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   420
=head2 AllPgpKeys
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   421
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   422
Returns a reference to an array of all PGP key IDs listed in the export table.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   423
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   424
=head2 ExportableComponents
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   425
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   426
Returns a reference to an array of all the components listed in the export table
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   427
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   428
=head2 ComponentIsExportable
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   429
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   430
Expects to be passed a component name. Returns true if the component is listed in the
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   431
export table.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   432
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   433
=head1 KNOWN BUGS
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   434
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   435
None.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   436
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   437
=head1 COPYRIGHT
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   438
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   439
 Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   440
 All rights reserved.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   441
 This component and the accompanying materials are made available
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   442
 under the terms of the License "Eclipse Public License v1.0"
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   443
 which accompanies this distribution, and is available
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   444
 at the URL "http://www.eclipse.org/legal/epl-v10.html".
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   445
 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   446
 Initial Contributors:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   447
 Nokia Corporation - initial contribution.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   448
 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   449
 Contributors:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   450
 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   451
 Description:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   452
 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   453
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   454
=cut