source: trunk/gli/src/org/greenstone/gatherer/GathererApplet.java@ 10726

Last change on this file since 10726 was 10726, checked in by mdewsnip, 19 years ago

(MAJOR CHANGE) This is the remote Greenstone building functionality implemented for the West Yorkshire Fire and Rescue Service. It allows collections to be built without having a local version of Greenstone, using either a stand-alone version of the GLI or the applet.

The collections are stored on the server (allowing people to collaborate on collections -- but not at the same time), and only what is necessary to let the user edit the collection is downloaded. Any changes to the collection are uploaded to the server.

An access restriction mechanism is implemented which uses the standard Greenstone user database to control who has access to collections.

  • Property svn:keywords set to Author Date Id Revision
File size: 7.0 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson, Greenstone Digital Library, University of Waikato
9 *
10 * Copyright (C) 1999 New Zealand Digital Library Project
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *########################################################################
26 */
27
28package org.greenstone.gatherer;
29
30import java.applet.*;
31import java.awt.event.ActionEvent;
32import java.awt.event.ActionListener;
33import java.net.*;
34import javax.swing.JApplet;
35
36import java.io.*;
37import javax.swing.*;
38import org.greenstone.gatherer.util.JarTools;
39import org.greenstone.gatherer.util.Utility;
40import org.greenstone.gatherer.util.ZipTools;
41
42
43public class GathererApplet extends JApplet implements ActionListener
44{
45 private Gatherer gatherer = null;
46
47
48 protected String fullLibraryURL(String address)
49 {
50 String full_address = "";
51
52 // make sure the URL has protocol, host, and file
53 if (address.startsWith("http:")) {
54 // the address has all the necessary components
55 full_address = address;
56 }
57 else if (address.startsWith("/")) {
58 // there is not protocol and host
59 URL document = getDocumentBase();
60 int port_no = document.getPort();
61
62 String port = (port_no>0) ? ":" + port_no : "";
63 full_address = "http://" + document.getHost() + port + address;
64 }
65
66 return full_address;
67 }
68
69
70 /* This is the entry point for the GLI applet */
71 public void init()
72 {
73 // Check if the user has agreed to the requested security settings
74 try {
75 // Work-around to reduce number of
76 // 'Could not lock user prefs' error messages.
77 // Thanks to Walter Schatz from the java forums.
78 System.setProperty("java.util.prefs.syncInterval","2000000");
79 }
80 catch (Exception exception) {
81 getContentPane().add(new JLabel("Greenstone Librarian Interface Applet deactivated", JLabel.CENTER));
82 return;
83 }
84
85 // Ensure platform specific LAF
86 try {
87 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
88 }
89 catch (Exception exception) {
90 exception.printStackTrace();
91 }
92
93 // Determine the GLI user directory path
94 String gli_user_directory_path = System.getProperty("user.home") + File.separator;
95 if (Utility.isWindows()) {
96 String windows_home_parameter = getParameter("windowsHome");
97 if (windows_home_parameter != null && !windows_home_parameter.equals("")) {
98 gli_user_directory_path = windows_home_parameter + File.separator + "GLI" + File.separator;
99 }
100 else {
101 gli_user_directory_path += "Application Data" + File.separator + "Greenstone" + File.separator + "GLI" + File.separator;
102 }
103 }
104 else {
105 gli_user_directory_path += ".gli" + File.separator;
106 }
107 Gatherer.setGLIUserDirectoryPath(gli_user_directory_path);
108
109 // If we're running as an applet we don't have a local GLI, so use the user directory path as the GLI path
110 Gatherer.setGLIDirectoryPath(gli_user_directory_path);
111
112 // Set some global variables so we know how we're running
113 Gatherer.isApplet = true;
114 String library_url_string = fullLibraryURL(getParameter("gwcgi"));
115 String gliserver_url_string = library_url_string.substring(0, library_url_string.lastIndexOf('/') + 1) + "gliserver";
116
117 // String debug_param = getParameter("debug");
118 // if ((debug_param != null) && (debug_param.matches("true"))) {
119 // go.debug = true;
120 // }
121
122 String[] args = { "-use_remote_greenstone",
123 "-gliserver_url", gliserver_url_string,
124 "-library_url", library_url_string,
125 "-debug",
126 };
127
128 File collect_directory = new File(Gatherer.getCollectDirectoryPath());
129 if (!collect_directory.exists()) {
130 if (JarTools.isInJar("collect.zip")) {
131 // Dig out collect.zip from JAR file and unzip it (thereby
132 // creating collect directory and descendants.
133 // This is done to seed gsdl home folder with config files
134 // for documented example collections so "base this on
135 // existing collection" works
136 unzipFromJar("collect.zip", Gatherer.getGLIUserDirectoryPath());
137 }
138 else {
139 // Prepare an empty collect dir for use
140 if (!collect_directory.mkdir()) {
141 System.err.println("Warning: Unable to make directory: " + collect_directory);
142 }
143 }
144 }
145
146 File metadata_directory = new File(Gatherer.getGLIMetadataDirectoryPath());
147 if (!metadata_directory.exists()) {
148 // dig out metadata.zip from JAR file and unzip it
149 unzipFromJar("metadata.zip", Gatherer.getGLIDirectoryPath());
150 }
151
152 // Create an instance of the Gatherer class, which will parse the args and prepare the rest of the GLI
153 gatherer = new Gatherer(args);
154
155 // Create a button for the user to press to open the GLI GUI
156 JButton launch_GLI_button = new JButton("Launch Greenstone Librarian Interface ...");
157 launch_GLI_button.addActionListener(this);
158 getContentPane().add(launch_GLI_button);
159 }
160
161
162 public void start()
163 {
164 System.err.println("Start called");
165 }
166
167
168 public void stop()
169 {
170 System.err.println("Stop called");
171
172 }
173
174
175 public void destroy()
176 {
177 System.err.println("Destroy called");
178 gatherer.exit();
179 System.err.println("Done gatherer exit.");
180 }
181
182
183 public void actionPerformed(ActionEvent e)
184 {
185 gatherer.openGUI();
186
187 // If there was an open collection last session, reopen it
188 new OpenCollectionFromLastTimeTask().start();
189 }
190
191
192 /** This is in it's own thread because this action cannot happen on the GUI thread. */
193 private class OpenCollectionFromLastTimeTask
194 extends Thread
195 {
196 public void run()
197 {
198 Gatherer.c_man.openCollectionFromLastTime();
199 }
200 }
201
202
203 /**
204 * Method which unzips a given metadata resoure.
205 * @param jar_zip_fname The name of the jar file as a <strong>String</strong>.
206 * @param dst_dir The destination directory for unzipping, also as a <strong>String</strong>.
207 * @see JarTools.extractFromJar(String, String, boolean)
208 */
209 static public void unzipFromJar(String jar_zip_fname, String dst_dir)
210 {
211 if (!dst_dir.endsWith(File.separator)) {
212 dst_dir += File.separator;
213 }
214
215 // !! TO DO: Test this !!
216 JarTools.extractFromJar(jar_zip_fname, dst_dir, true);
217 ZipTools.unzipFile(dst_dir + jar_zip_fname, dst_dir);
218 }
219}
Note: See TracBrowser for help on using the repository browser.