- Timestamp:
- 2013-11-19T12:06:05+13:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/plugouts/GreenstoneXMLPlugout.pm
r27522 r28642 40 40 } 41 41 42 my $arguments = []; 43 42 my $arguments = [ 43 { 'name' => "group_size", 44 'desc' => "{BasePlugout.group_size}", 45 'type' => "int", 46 'deft' => "1", 47 'reqd' => "no", 48 'hiddengli' => "no"} 49 ]; 44 50 my $options = { 'name' => "GreenstoneXMLPlugout", 45 51 'desc' => "{GreenstoneXMLPlugout.desc}", 46 52 'abstract' => "no", 47 'inherits' => "yes" }; 53 'inherits' => "yes", 54 'args' => $arguments }; 48 55 49 56 sub new { … … 60 67 } 61 68 69 sub is_group { 70 my $self = shift (@_); 71 return ($self->{'group_size'} > 1); 72 } 73 62 74 sub saveas { 63 75 my $self = shift (@_); 64 my ($doc_obj,$doc_dir) = @_; 65 76 my ($doc_obj, $doc_dir) = @_; 66 77 my $outhandler; 67 78 my $output_file; 68 79 if ($self->{'debug'}) { 69 80 $outhandler = STDOUT; 70 # can we do the xslt and still do debug mode?71 81 } 72 82 else { 73 my $output_dir = $self->get_output_dir(); 74 if (!&FileUtils::directoryExists($output_dir)) 75 { 76 &FileUtils::makeAllDirectories($output_dir); 77 } 83 84 $self->process_assoc_files($doc_obj, $doc_dir, ''); 85 $self->process_metafiles_metadata ($doc_obj); 86 87 # open up the outhandler 88 if ($self->is_group() && !$self->{'new_doc_dir'}) { 89 # we already have a handle open ?? 90 $outhandler = $self->{'group_outhandler'}; 91 } else { 92 $output_file = &FileUtils::filenameConcatenate($self->{'output_dir'}, $doc_dir, "doc.xml"); 93 # open the new handle 94 $self->open_xslt_pipe($output_file, $self->{'xslt_file'}); 78 95 79 my $working_dir = &FileUtils::filenameConcatenate($output_dir, $doc_dir); 80 if (!&FileUtils::directoryExists($working_dir)) 81 { 82 &FileUtils::makeAllDirectories($working_dir); 83 } 96 if (defined $self->{'xslt_writer'}){ 97 $outhandler = $self->{'xslt_writer'}; 98 } 99 else{ 100 $outhandler = $self->get_output_handler($output_file); 101 } 102 103 if ($self->is_group()) { 104 $self->{'group_outhandler'} = $outhandler; 105 } 106 } 107 } # else not debug 108 binmode($outhandler,":utf8"); 84 109 85 $self->process_assoc_files ($doc_obj, $doc_dir, ''); 86 87 $self->process_metafiles_metadata ($doc_obj); 88 89 $output_file = &FileUtils::filenameConcatenate($working_dir, "doc.xml"); 90 91 $self->open_xslt_pipe($output_file, $self->{'xslt_file'}); 92 93 if (defined $self->{'xslt_writer'}){ 94 $outhandler = $self->{'xslt_writer'}; 95 } 96 else{ 97 $outhandler = $self->get_output_handler($output_file); 98 } 110 # only output the header if we have started a new doc 111 if (!$self->is_group() || $self->{'new_doc_dir'}) { 112 $self->output_xml_header($outhandler); 99 113 } 100 114 101 binmode($outhandler,":utf8"); 115 my $section_text = &docprint::get_section_xml($doc_obj,$doc_obj->get_top_section()); 116 print $outhandler $section_text; 117 118 # only output the footer if we are not doing group stuff. The group file will be finished in close_group_output 119 if (!$self->is_group()) { 120 $self->output_xml_footer($outhandler); 121 } 102 122 103 $self->output_xml_header($outhandler,"Archive"); 104 my $section_output = &docprint::get_section_xml($doc_obj, $doc_obj->get_top_section()); 105 print $outhandler $section_output; 106 $self->output_xml_footer($outhandler,"Archive"); 107 108 if (!$self->{'debug'}) { 123 # close off the output - in a group process situation, this will be done by close_group_output 124 if (!$self->is_group() && !$self->{'debug'}) { 109 125 if (defined $self->{'xslt_writer'}){ 110 126 $self->close_xslt_pipe(); … … 113 129 &FileUtils::closeFileHandle($output_file, \$outhandler) if defined $output_file; 114 130 } 115 116 $self->{'short_doc_file'} = &FileUtils::filenameConcatenate($doc_dir, "doc.xml");117 118 $self->store_output_info_reference($doc_obj);119 131 } 132 $self->{'short_doc_file'} = &FileUtils::filenameConcatenate($doc_dir, "doc.xml"); 133 134 $self->store_output_info_reference($doc_obj); 135 120 136 } 121 137 138 sub output_xml_header { 139 my $self = shift (@_); 140 my ($outhandle) = @_; 141 142 print $outhandle '<?xml version="1.0" encoding="utf-8" standalone="no"?>' . "\n"; 143 print $outhandle "<!DOCTYPE Archive SYSTEM \"http://greenstone.org/dtd/Archive/1.0/Archive.dtd\">\n"; 144 print $outhandle "<Archive>\n"; 145 } 146 147 sub output_xml_footer { 148 my $self = shift (@_); 149 my ($outhandle) = @_; 150 151 print $outhandle "</Archive>\n"; 152 } 153 154 sub close_group_output 155 { 156 my $self = shift(@_); 157 158 # make sure that the handle has been opened - it won't be if we failed 159 # to import any documents... 160 my $outhandle = $self->{'group_outhandler'}; 161 if (defined(fileno($outhandle))) { 162 $self->output_xml_footer($outhandle); 163 &FileUtils::closeFileHandle("", \$outhandle); 164 undef $self->{'group_outhandler'} 165 } 166 167 my $OID = $self->{'gs_OID'}; 168 my $short_doc_file = $self->{'short_doc_file'}; 169 170 ### TODO - from here is old code. check that it is still valid. 171 if ($self->{'gzip'}) { 172 my $doc_file = $self->{'gs_filename'}; 173 `gzip $doc_file`; 174 $doc_file .= ".gz"; 175 $short_doc_file .= ".gz"; 176 if (!&FileUtils::fileExists($doc_file)) { 177 my $outhandle = $self->{'output_handle'}; 178 print $outhandle "error while gzipping: $doc_file doesn't exist\n"; 179 return 0; 180 } 181 } 182 183 return 1; 184 } 122 185 123 186
Note:
See TracChangeset
for help on using the changeset viewer.