###########################################################################
#
# HtmlToExpediteeAction.pm -- 
# A component of the Greenstone digital library software
# from the New Zealand Digital Library Project at the 
# University of Waikato, New Zealand.
#
# Copyright (C) 2009 New Zealand Digital Library Project
#
# This program is free software; you can redistr   te it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
###########################################################################

package CollectionSpaceAction;

use strict;

use cgiactions::baseaction;

use ExpediteeFrameIO;
use JSON;


BEGIN {
#    unshift (@INC, "$ENV{'GSDLHOME'}/perllib/cpan/perl-5.8");
}


@CollectionSpaceAction::ISA = ('baseaction');



# c=collect and site=xxxx implicitly handled by code
# 'c' is handled by baseaction, site is tested for only if greenstone3 


my $action_table =
{ 
    "generate-frame"     => { 'compulsory-args' => [ "fn", "json","cl" ],
			      'optional-args'   => [] }, 
};


sub new 
{
    my $class = shift (@_);
    my ($gsdl_cgi,$iis6_mode) = @_;

    my $self = new baseaction($action_table,$gsdl_cgi,$iis6_mode);

    return bless $self, $class;
}


sub generate_frame
{
    my $self = shift @_;

    my $username  = $self->{'username'};
    my $collect   = $self->{'collect'};
	
    my $gsdl_cgi  = $self->{'gsdl_cgi'};
    my $gsdlhome  = $self->{'gsdlhome'};
	
    my $site = $self->{'site'};
    my $collect_dir = $gsdl_cgi->get_collection_dir($site);

    my $fn = $self->{'fn'};
	my $cl = $self->{'cl'};
	
    # no need to lock collection (??), the operation is read only

    my $json_str_unicode = $self->{'json'}; 
    my $json_str_utf8 = Encode::encode("utf8",$json_str_unicode);
    my $exp_frame_tree = decode_json $json_str_utf8;
	
	my $frameset_name = "$cl-$collect";
	my $output_dir = &util::filename_cat($collect_dir,$collect,"export",$frameset_name);
	
    if (!-d $output_dir) {
	&util::mk_dir($output_dir);
    }

    my $expeditee_frame_io = new ExpediteeFrameIO($output_dir);
    
    $expeditee_frame_io->buildFrame($exp_frame_tree);

    if ($expeditee_frame_io->saveFrame("$fn.exp")) {
	
	# write out next free frame num
		$expeditee_frame_io->saveLastFrameNumber($fn,$frameset_name);

		$gsdl_cgi->generate_message("html-to-expeditee saved frame $fn");
    }
    else {
	$gsdl_cgi->generate_error("Failed to save frame number $fn");
    }
}


1;
