package EPrints::Plugin::Export::DIDL;

# eprint needs magic documents field

# documents needs magic files field

use Unicode::String qw( utf8 );

use EPrints::Plugin::Export;

@ISA = ( "EPrints::Plugin::Export" );

use strict;

# The utf8() method is called to ensure that
# any broken characters are removed. There should
# not be any broken characters, but better to be
# sure.

sub new
{
	my( $class, %opts ) = @_;

	my $self = $class->SUPER::new( %opts );

	$self->{name} = "DIDL";
	$self->{accept} = [ 'dataobj/eprint' ];
	$self->{visible} = "all";
	$self->{suffix} = ".xml";
	$self->{mimetype} = "text/xml";

	$self->{xmlns} = "urn:mpeg:mpeg21:2002:02-DIDL-NS",
	$self->{schemaLocation} = "http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-21_schema_files/did/didmodel.xsd";

	return $self;
}



sub xml_dataobj
{
	my( $plugin, $eprint ) = @_;

	my $didl = $plugin->{session}->make_element( 
		"didl:DIDL",
		"xmlns:didl"=>"urn:mpeg:mpeg21:2002:02-DIDL-NS",
		"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
		"xsi:schemaLocation"=>"urn:mpeg:mpeg21:2002:02-DIDL-NS 
			 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-21_schema_files/did/didmodel.xsd" );
	my $item = $plugin->{session}->make_element( "didl:Item" );
	$didl->appendChild( $item );


	my $d1 = $plugin->{session}->make_element( "didl:Descriptior" );
	my $s1 = $plugin->{session}->make_element( "didl:Statement", mimeType=>"application/xml; charset=utf-8" );
	my $ident = $plugin->{session}->make_element( 
		"dii:Identifier",
		"xmlns:dii"=>"urn:mpeg:mpeg21:2002:01-DII-NS",
		"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
		"xsi:schemaLocation"=>"urn:mpeg:mpeg21:2002:01-DII-NS
		 	http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-21_schema_files/dii/dii.xsd" );
	$ident->appendChild( $plugin->{session}->make_text( $eprint->get_url ) );
	$s1->appendChild( $ident );
	$d1->appendChild( $s1 );
	$item->appendChild( $d1 );


	my $d2 = $plugin->{session}->make_element( "didl:Descriptior" );
	my $s2 = $plugin->{session}->make_element( "didl:Statement", mimeType=>"application/xml; charset=utf-8" );
	my $dc_plugin = $plugin->{session}->plugin( "Export::OAI_DC" );
	$s2->appendChild( $dc_plugin->xml_dataobj( $eprint ) ); 
	$d2->appendChild( $s2 );
	$item->appendChild( $d2 );

	my $mimetypes = $plugin->{session}->get_repository->get_conf( "oai", "mime_types" );
	foreach my $doc ( $eprint->get_all_documents )
	{
		my $comp = $plugin->{session}->make_element( "didl:Component" );
		$item->appendChild( $comp );


		my $d3 = $plugin->{session}->make_element( "didl:Descriptior" );
		my $s3 = $plugin->{session}->make_element( "didl:Statement", mimeType=>"application/xml; charset=utf-8" );
		my $i3 = $plugin->{session}->make_element( 
			"dii:Identifier",
			"xmlns:dii"=>"urn:mpeg:mpeg21:2002:01-DII-NS",
			"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
			"xsi:schemaLocation"=>"urn:mpeg:mpeg21:2002:01-DII-NS
		 	    http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-21_schema_files/dii/dii.xsd" );
		$i3->appendChild( $plugin->{session}->make_text( $doc->get_baseurl ) );
		$s3->appendChild( $i3 );
		$d3->appendChild( $s3 );
		$comp->appendChild( $d3 );

		my %files = $doc->files;
		foreach my $file ( keys %files )
		{
			my $res = $plugin->{session}->make_element( "didl:Resource", 
	#				mimeType=>$format,
					ref=>$doc->get_url( $file ) );
			$comp->appendChild( $res );
		}
	}

	return $didl;
}

sub output_dataobj
{
	my( $plugin, $dataobj ) = @_;

	my $didl = $plugin->xml_dataobj( $dataobj );

	return EPrints::XML::to_string( $didl );
}


1;
