source: main/trunk/package-kits/scripts/gs-mkservlet.pl@ 29684

Last change on this file since 29684 was 29684, checked in by Jeremy Symon, 9 years ago

Added gs-mkservlet script which creates a servlet with a valid site and interface.

  • Property svn:executable set to *
File size: 3.6 KB
Line 
1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5use utf8;
6
7use lib 'perllib';
8use Greenstone::XML::Tidy;
9use Greenstone::Interface;
10use Greenstone::Site;
11use Hash::Ordered;
12
13my $delete = 0;
14my $file = "/usr/share/greenstone/web/WEB-INF/servlets.xml";
15my $description = "";
16my $class = "org.greenstone.gsdl3.LibraryServlet";
17my ($name, $site, $interface);
18
19while (@ARGV) {
20 for (shift) {
21 if (/^-delete$/) {
22 $delete = 1;
23 } elsif (/^-file$/) {
24 ($file = shift) or die "Expected -file <file>\n";
25 } elsif (/^-name$/) {
26 ($name = shift) or die "Expected -name <name>\n";
27 } elsif (/^-desc\(ription\)?$/) {
28 ($description = shift) or die "Expected -desc <description>\n";
29 } elsif (/^-class$/) {
30 ($class = shift) or die "Expected -class <class>\n";
31 } elsif (/^-site$/) {
32 ($site = shift) or die "Expected -site <site>\n";
33 } elsif (/^-interface$/) {
34 ($interface = shift) or die "Expected -interface <interface>\n";
35 } else {
36 die "Unknown flag '$_'\n";
37 }
38 }
39}
40
41if ($delete) {
42 my $servlets = read_xml $file;
43
44 my $deleted = 0;
45
46 my $servlet_array = $servlets->get ("servlet");
47 if (ref $servlet_array eq 'ARRAY') {
48 my @array = grep { $_->get ("servlet-name") ne $name } @$servlet_array;
49 $deleted = (scalar @array < scalar @$servlet_array);
50 $servlets->set ("servlet" => \@array);
51 } elsif ($servlet_array->get ("servlet-name") eq $name) {
52 $servlets->delete ("servlet");
53 $deleted = 1;
54 }
55
56 die "Servlet not found\n" unless $deleted;
57
58 write_xml ($servlets, $file);
59} else {
60 (defined $name and defined $site and defined $interface) or die "Requires name, site, interface\n";
61
62 Greenstone::Site->new ($site)->exists or die "Site '$site' does not exist\n";
63 Greenstone::Interface->new ($interface)->exists or die "Interface '$interface' does not exist\n";
64
65 my $servlets = read_xml $file;
66
67 my $servlet_array = $servlets->get ("servlet");
68 unless (ref $servlet_array eq 'ARRAY') {
69 $servlet_array = [ $servlet_array ];
70 }
71 for my $servlet (@$servlet_array) {
72 $servlet->get ("servlet-name") eq $name and die "A servlet already exists with that name\n";
73 my $servlet_params = $servlet->get ("init-param");
74 unless (ref $servlet_params eq 'ARRAY') {
75 $servlet_params = [ $servlet_params ];
76 }
77 my ($servlet_site, $servlet_interface);
78 for my $param (@$servlet_params) {
79 my $key = $param->get ("param-name");
80 my $val = $param->get ("param-value");
81 if ($key eq "site_name") {
82 $servlet_site = $val;
83 } elsif ($key eq "interface_name") {
84 $servlet_interface = $val;
85 }
86 }
87 $servlet_site eq $site and $servlet_interface eq $interface and
88 die "A servlet already exists with that combination of site and interface\n";
89 }
90
91 # Actually make the servlet now
92
93 sub init_param {
94 return Hash::Ordered->new (
95 'param-name' => shift,
96 'param-value'=> shift,
97 );
98 }
99
100 write_xml (
101 Hash::Ordered->new (
102 'servlet' => Hash::Ordered->new (
103 'servlet-name' => $name,
104 'description' => $description,
105 'servlet-class'=> $class,
106 'init-param' => [
107 init_param ('site_name', $site),
108 init_param ('interface_name', $interface),
109 ],
110 ),
111 ),
112 $file,
113 '>>'
114 );
115}
Note: See TracBrowser for help on using the repository browser.