#!/usr/bin/perl -sw
#
# Created by Steve Voisey (srv) 16 Mar 2012.
# email: [steve.voisey@ericsson.com]
#
# file:    rollbackTemplate.pl
# version: V1.001
#
#
# Author  Date      Version Description
# ======  ========= ======= ===========
# srv     16/mar/12 V1.000  Created.
#
use Switch;
use File::Copy;
use File::Basename;
if (defined($help))    { help(); exit;}

unless (defined($templateDir))  { $home = "/opt/tandbergtv/cms/workflow"; }

#$home = "/root/steve/templates";

unless (defined($templateDir))  { $templateDir  = "$home/templates"; }
unless (defined($importDir))    { $importDir    = "$home/imported"; }
unless(defined($load))          { $load         = "no"; }
unless(defined($update))        { $update       = "yes"; }
 
my %templateHash;
my %importedHash;
my @importedArray = ();
my $version = "X";
my $DIVIDE = "=" x 80 . "\n";

#my @templateArray = ();
$templateList = "$templateDir/";
unless (defined(@templateArray))  { @templateArray  = (<$templateList*.xml>); }

##################################################################################
# For testing only:
#     load up templates directory with the contents of the imported directory.
##################################################################################

if ( $load =~ /yes/i ) { loadTemplates ( $importDir, $templateDir); }

##################################################################################
# Lets start!
##################################################################################

foreach $templateFilePath (@templateArray) {
        
    $importedFileStem = getImportedFileStem( $importDir, $templateFilePath);
    $version          = getTemplateStemVersion( $importedFileStem );
    $releaseVersion   = getTemplateVersion( $templateFilePath );
    
	print "current version:     $importedFileStem version [$version]\n";
    print "old release version: $templateFilePath version [$releaseVersion]\n";
    
    updateTemplateVersion( $update, $templateFilePath, ( $version + 1) );  
    $releaseVersion   = getTemplateVersion( $templateFilePath );
    print "\nnew release version: $templateFilePath version [$releaseVersion]\n";
    print "\n$DIVIDE\n";
    
}

# All done!

exit;

##################################################################################
# loadTemplates
##################################################################################

# For testing only, populate templates with all the previously imported templates.
# Sort before copying so final version will be the latest.
# Yep, lots of unnecessary copies, but its simple!

sub loadTemplates {
    my $importDir   = $_[0];
    my $templateDir = $_[1];
    
    my @startArray;
    my $file;
    my $element;
    
    @startArray = <$importDir/*>;
    @startArray = sort(@startArray);
    # @startArray = reverse(@startArray);
    foreach $element (@startArray) {
        unless($element =~ /(.*)-xml.*/) { next; }
        ($file) = $element =~ /(.*)-xml.*/;
        $file = basename("$file.xml");
        print "Copying [$element] to [$templateDir/$file]\n";
        copy("$element", "$templateDir/$file") or die "File cannot be copied.";
    }
}

##################################################################################
# getImportedFileStem
##################################################################################

# Workout what the stem ( non date stampled portion of the file path) to the last 
# imported version of a template.

sub getImportedFileStem {
    my $importDir        = $_[0];
    my $templateFilePath = $_[1];
    
    
    my $templateFile = "";
    my $importedFileStem = "";
    my @tmp = ();
    
    $templateFile = basename("$templateFilePath");
    @tmp = split(/\./, $templateFile);
    $templateFile = $tmp[0];
    $importedFileStem = "$importDir/$templateFile";
    $importedFileStem =~ s/ /\\ /g;
    return $importedFileStem;
}    
  
##################################################################################
# getTemplateStemVersion
##################################################################################

sub getTemplateStemVersion {
    my $importedFileStem = $_[0];
    
    my $lineOne = "";
    my $version = 0;
    my $templateFile = "";
    my @tmp = ();
    my @importedArray = ();

	@importedArray = <$importedFileStem*.xml>;
	@importedArray = sort(@importedArray);
	@importedArray = reverse(@importedArray);

	$importedFileStem = $importedArray[0];
	$importedFileStem =~ s/ /\\ /g;
	$lineOne = `head -1 $importedFileStem`;
	($version) = $lineOne =~ /version.*version="(.*)">/;
	#print "current template: $importedFileStem version [$version]\n";

    return $version;
}

##################################################################################
# getTemplateStemVersion
##################################################################################

sub getTemplateVersion {
    my $template = $_[0];
    
    my $lineOne = "";
    my $version = 0;

	$template =~ s/ /\\ /g;
	$lineOne = `head -1 $template`;
	($version) = $lineOne =~ /version.*version="(.*)">/;
	#print "current template: $template version [$version]\n";

    return $version;
}

##################################################################################
# updateTemplateVersion
##################################################################################

sub updateTemplateVersion {
    my $update   = $_[0];
    my $filePath = $_[1];
    my $version  = $_[2];
    
        
    # <?xml version="1.0" encoding="UTF-8"?><process-definition name="Purge Title" version="8">
    #       sed -i "s/\(.*process-definition.*name.*version=\"\)\(.*\)\(\">\)/\12\3/" /root/steve/templates/templates/WidgetTester.xml     
        
    $cmd = "sed -i \"s/\\(.*process-definition.*name.*version=\\\"\\)\\(.*\\)\\(\\\">\\)/\\1$version\\3/\" $filePath";
    print "command: [ $cmd ]\n";
    #`$cmd`;  
    if ( $update =~ /yes/i ) {
        print "updating template version to [$version]\n";
        `$cmd`;
    }    
}

##################################################################################
# Finished
##################################################################################




