diff options
Diffstat (limited to 'solenv/bin/cwsattach.pl')
-rw-r--r-- | solenv/bin/cwsattach.pl | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/solenv/bin/cwsattach.pl b/solenv/bin/cwsattach.pl new file mode 100644 index 000000000000..05e1b8df3cb4 --- /dev/null +++ b/solenv/bin/cwsattach.pl @@ -0,0 +1,220 @@ +: +eval 'exec perl -wS $0 ${1+"$@"}' + if 0; +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* +# +# cwsattach.pl - attach files to CWS +# + +use strict; +use Getopt::Long; +use Cwd; + +#### module lookup +my @lib_dirs; +BEGIN { + if ( !defined($ENV{SOLARENV}) ) { + die "No environment found (environment variable SOLARENV is undefined)"; + } + push(@lib_dirs, "$ENV{SOLARENV}/bin/modules"); + push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS}); +} +use lib (@lib_dirs); + +use Cws; + +#### script id ##### + +( my $script_name = $0 ) =~ s/^.*\b(\w+)\.pl$/$1/; + +my $script_rev; +my $id_str = ' $Revision: 1.3 $ '; +$id_str =~ /Revision:\s+(\S+)\s+\$/ + ? ($script_rev = $1) : ($script_rev = "-"); + +print STDERR "$script_name -- version: $script_rev\n"; + +#### global ##### + +my $is_debug = 1; # enable debug +my $opt_master = ''; # option: master workspace +my $opt_child = ''; # option: child workspace +my $opt_mime_type = ''; # option: mime type + + +#### main ##### + +my $arg_file = parse_options(); +attach_cws($arg_file); +exit(0); + +#### subroutines #### + +sub attach_cws +{ + my $filename = shift; + # get master and child workspace + my $masterws = $opt_master ? uc($opt_master) : $ENV{WORK_STAMP}; + my $childws = $opt_child ? $opt_child : $ENV{CWS_WORK_STAMP}; + + if ( !defined($masterws) ) { + print_error("Can't determine master workspace environment.\n" + . "Please initialize environment with setsolar ...", 1); + } + + if ( !defined($childws) ) { + print_error("Can't determine child workspace environment.\n" + . "Please initialize environment with setsolar ...", 1); + } + + my $cws = Cws->new(); + $cws->child($childws); + $cws->master($masterws); + + my $mime_type = $opt_mime_type ? $opt_mime_type : find_mime_type($filename); + + no strict; + + if ( is_valid_cws($cws) ) { + #print "CWS is valid filename=" . $filename . " mime_type=" . $mime_type . "\n"; + open(DATA,"<$filename") || die "can't open filename"; + $data=""; + while(<DATA>) { + $data.=$_; + } + my $result=$cws->save_attachment($filename,$mime_type,$data); + } else { + print STDERR "cws is not valid"; + } + exit(0) +} + + +sub find_mime_type +{ + my $filename = shift; + $filename=~/(.*)\.(.*$)/; + my $ext=$2; + my $fmime=''; + + if ( defined($ext) ) { + open(MIME,"< $ENV{SOLARENV}/inc/mime.types")|| die "can not open mimetype file"; + while (<MIME>) { + my @a=split(); + my $iscomment=0; + if ( /(\s*\#).*/ ) { + $iscomment=1; + } else { + $iscomment=0; + } + if ( $iscomment eq 0 && $#a >= 1 && $fmime eq '' ) { + my $i=1; + for ($i=1; $i<=$#a; $i++) { + if ( $a[$i] eq $ext ) { + $fmime=$a[0]; + } + } + } + } + + } + if ( $fmime eq '' ) { + $fmime="application/octet-stream"; + } + return $fmime; +} + + +sub is_valid_cws +{ + my $cws = shift; + + my $masterws = $cws->master(); + my $childws = $cws->child(); + # check if we got a valid child workspace + my $id = $cws->eis_id(); + if ( !$id ) { + print_error("Child workspace '$childws' for master workspace '$masterws' not found in EIS database.", 2); + } + print_message("Master workspace '$masterws', child workspace '$childws':"); + return 1; +} + +sub parse_options +{ + # parse options and do some sanity checks + my $help = 0; + my $success = GetOptions('h' => \$help, 'm=s' => \$opt_master, 'c=s'=> \$opt_child, 't=s'=> \$opt_mime_type); + if ( $help || !$success || $#ARGV < 0 ) { + usage(); + exit(1); + } + + return $ARGV[0]; +} + +sub print_message +{ + my $message = shift; + + print STDERR "$script_name: "; + print STDERR "$message\n"; + return; +} + +sub print_error +{ + my $message = shift; + my $error_code = shift; + + print STDERR "$script_name: "; + print STDERR "ERROR: $message\n"; + + if ( $error_code ) { + print STDERR "\nFAILURE: $script_name aborted.\n"; + exit($error_code); + } + return; +} + +sub usage +{ + print STDERR "Usage: cwsattach [-h] [-m master] [-c child] [-t mimetype] filename\n"; + print STDERR "\n"; + print STDERR "Attach files to CWS in EIS database\n"; + print STDERR "\n"; + print STDERR "Options:\n"; + print STDERR "\t-h\t\thelp\n"; + print STDERR "\t-m master\toverride MWS specified in environment\n"; + print STDERR "\t-c child\toverride CWS specified in environment\n"; + print STDERR "\t-t mimetype\texplicitly set mime type\n"; + print STDERR "Examples:\n"; + print STDERR "\tcwsattach barfoo.html\n"; + print STDERR "\tcwsattach -t text bar.cxx\n"; + print STDERR "\tcwsattach -t text/rtf foo.rtf\n"; +} |