#!/usr/bin/perl use strict; use File::Basename; use Data::Dumper; use warnings; my $path = dirname($0); my %conf = ( 'jimc' => "jimc.jnlp", 'regions' => "$path/regions", 'deployconf' => "$ENV{HOME}/.jimc", 'defaults' => "$path/defaults", ); my $regions_list = list_regions(); my $selected_region = select_region($regions_list); print "REGION: $selected_region\n"; deploy_region($selected_region); start_jimc($selected_region); print "NOTE: Close JIMC before saving the region!\n"; print "Do you want to save the region? [y/N] "; my $sel = ; if ( defined $sel && $sel =~/[yY]/ ) { save_region($selected_region); print "Region $selected_region saved\n"; } print "Done\n"; sub list_regions { my %r; opendir(DIR,$conf{regions}) || die "directory $conf{regions} does not exist"; while(readdir DIR) { next if /^\./; my $dir = $_; opendir(DIR2,$conf{regions}.'/'.$dir) || next; while(readdir DIR2) { next if /^\./; my $file = $_; push @{$r{$dir}}, $file; } closedir(DIR2); } closedir(DIR); return \%r; } sub select_region { my($regions) = @_; my $select; my $region; while(1) { print "=============================================================================\n"; print "== SELECT REGION TO START ==\n"; print "=============================================================================\n"; my @idx; foreach my $r ( sort keys %{$regions} ) { push @idx, $r; printf("== %s) %s\n", scalar(@idx), $r); } print "=============================================================================\n"; print "Which region do you want to start? : "; my $select = ; chomp $select; if ( defined $select && $select =~ /^\d+$/ && defined $idx[$select-1] ) { $region = $idx[$select-1]; last; } } return $region; } sub deploy_region { my($region) = @_; system("rm -f $conf{deployconf}/*"); system("cp $conf{defaults}/* $conf{deployconf}/"); system("cp $conf{regions}/$region/* $conf{deployconf}/"); } sub start_jimc { my($region) = @_; my $jimc = "$conf{regions}/$region/$conf{jimc}" ? "$conf{regions}/$region/$conf{jimc}" : "$conf{defaults}/$conf{jimc}"; system("open $jimc"); } sub save_region { my($region) = @_; opendir(CONF,$conf{deployconf}) || die "failed to open jimc config dir $conf{deployconf}"; while(readdir CONF) { next if /^\./; my $file = $_; if ( -r "$conf{regions}/$region/$file" ) { print "Copying $file to region $region\n"; system("cp $conf{deployconf}/$file $conf{regions}/$region/$file"); } } closedir(CONF); } sub file_ts { my($file) = @_; if ( -r $file ) { my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($file); return $mtime > $ctime ? $mtime : $ctime; } return 0; }