Project

General

Profile

1
/**
2
 *  '$RCSfile$'
3
 *  Copyright: 2004 University of New Mexico and the 
4
 *                  Regents of the University of California
5
 *
6
 *   '$Author: costa $'
7
 *     '$Date: 2004-05-03 15:59:10 -0700 (Mon, 03 May 2004) $'
8
 * '$Revision: 2155 $'
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, write to the Free Software
22
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
 */
24

    
25
package edu.ucsb.nceas.metacat.harvesterClient;
26

    
27
import com.oreilly.servlet.ParameterParser;
28
import edu.ucsb.nceas.utilities.Options;
29
import java.io.File;
30
import java.io.InputStream;
31
import java.io.IOException;
32
import java.io.PrintWriter;
33
import java.sql.Connection;
34
import java.sql.DriverManager;
35
import java.sql.ResultSet;
36
import java.sql.SQLException;
37
import java.sql.SQLWarning;
38
import java.sql.Statement;
39
import java.text.ParseException;
40
import java.text.SimpleDateFormat;
41
import java.util.Date;
42
import java.util.Enumeration;
43
import javax.servlet.ServletConfig;
44
import javax.servlet.ServletContext;
45
import javax.servlet.ServletException;
46
import javax.servlet.http.HttpServlet;
47
import javax.servlet.http.HttpServletRequest;
48
import javax.servlet.http.HttpServletResponse;
49
import javax.servlet.http.HttpSession;
50

    
51
/**
52
 * HarvesterRegistration is a servlet that implements harvester registration.
53
 * The servlet reads parameters that were entered in a harvester registration
54
 * form, checks the validity of the values, stores the values in the database
55
 * by either inserting, updating, or removing a record in the 
56
 * HARVEST_SITE_SCHEDULE table.
57
 * 
58
 * @author    costa
59
 * 
60
 */
61
public class HarvesterRegistration extends HttpServlet {
62

    
63
  /*
64
   * Class fields
65
   */
66
  private static final String CONFIG_DIR = "WEB-INF";
67
  private static final String CONFIG_NAME = "metacat.properties";
68
   
69
  /*
70
   * Object fields
71
   */
72
  private ServletConfig config = null;
73
  private ServletContext context = null;
74
  private String defaultDB;     // database connection, from properties file
75
  final private long millisecondsPerDay = (1000 * 60 * 60 * 24);
76
  private String password;      // database password, from properties file
77
  private String user;          // database user, from properties file
78
   
79

    
80
  /*
81
   * Object methods
82
   */
83
   
84
   
85
  /**
86
   * Checks validity of user input values.
87
   * 
88
   * @param out             the PrintWriter output object
89
   * @param documentListURL the Harvest Document List URL specified by the user
90
   * @param updateFrequency the Harvest Frequency specified by the user
91
   * @return validValues    true if all values are valid, else false
92
   */
93
  private boolean checkValues(PrintWriter out,
94
                              String documentListURL,
95
                              int updateFrequency
96
                             ) {
97
    boolean validValues = true;
98

    
99
    // Check validity of the Harvest Document List URL field    
100
    if (documentListURL.equals("")) {
101
      out.println(
102
              "A value must be specified in the Harvest Document List URL field"
103
                 );
104
      validValues = false;
105
    }
106

    
107
    // Check validity of the Harvest Frequency field    
108
    if ((updateFrequency < 0) || (updateFrequency > 99)) {
109
      out.println("Harvest Frequency should be in the range 1 to 99");
110
      validValues = false;
111
    }
112
    
113
    return validValues;
114
  }
115
  
116
  
117
  /**
118
   * Closes the database connection.
119
   * 
120
   * @param conn  The connection.
121
   */
122
  private void closeConnection(Connection conn) {
123
    try {
124
      if (conn != null) {
125
        conn.close();
126
      }
127
    }
128
    catch (SQLException e) {
129
      // ignored
130
    }
131
  }
132

    
133

    
134
  /**
135
   * Inserts a record to the HARVEST_SITE_SCHEDULE table.
136
   * 
137
   * @param out             the PrintWriter output object
138
   * @param conn            the Connection
139
   * @param siteScheduleID  the primary key for the table
140
   * @param contactEmail    contact email address of the site user
141
   * @param documentListURL the URL of the harvester document list at the site
142
   * @param ldapDN          the site user's LDAP DN
143
   * @param ldapPwd         the site user's LDAP password
144
   * @param unit            the update frequency unit, e.g. "days", "weeks"
145
   * @param updateFrequency the update frequency, an integer in range 1-99
146
   */
147
  private void dbInsert(PrintWriter out,
148
                        Connection conn,
149
                        int siteScheduleID,
150
                        String contactEmail,
151
                        String documentListURL,
152
                        String ldapDN,
153
                        String ldapPwd,
154
                        String unit,
155
                        int updateFrequency
156
                       ) {
157
    String dateNextHarvest;
158
    long delta;
159
    Date dnh;                          // Date of next harvest
160
    Date now;                          // Today's date
161
    String query;
162
		Statement stmt;
163
    long timeNextHarvest;
164
    SimpleDateFormat writeFormat = new SimpleDateFormat("dd-MMM-yyyy");
165
    
166
    // Calculate the value of delta, the number of milliseconds between the
167
    // last harvest date and the next harvest date.
168
    delta = updateFrequency * millisecondsPerDay;
169
    
170
    if (unit.equals("weeks")) {
171
      delta *= 7;
172
    }
173
    else if (unit.equals("months")) {
174
      delta *= 30;
175
    }
176

    
177
    now = new Date();
178
    timeNextHarvest = now.getTime();
179
    dnh = new Date(timeNextHarvest);
180
    dateNextHarvest = writeFormat.format(dnh);
181
	
182
		try {
183
			stmt = conn.createStatement();							
184
			query = "insert into HARVEST_SITE_SCHEDULE " +
185
      "(SITE_SCHEDULE_ID, CONTACT_EMAIL, DOCUMENTLISTURL, LDAPDN, LDAPPWD, " +
186
      "UNIT, UPDATEFREQUENCY, DATENEXTHARVEST) " +
187
      "values(" + siteScheduleID + "," +
188
                  quoteString(contactEmail) + "," +
189
                  quoteString(documentListURL) + "," +
190
                  quoteString(ldapDN) + "," +
191
                  quoteString(ldapPwd) + "," +
192
                  quoteString(unit) + "," +
193
                  updateFrequency + "," +
194
                  quoteString(dateNextHarvest) + ")";
195
                  
196
      System.out.println(query);
197
      stmt.executeUpdate(query);
198
			stmt.close();
199
      reportResults(out, ldapDN, contactEmail, documentListURL, updateFrequency,
200
                    unit, dateNextHarvest);
201
		}
202
    catch(SQLException e) {
203
			System.out.println("SQLException: " + e.getMessage());
204
		}
205
   }
206
   
207

    
208
  /**
209
   * Removes a record from the HARVEST_SITE_SCHEDULE table.
210
   * 
211
   * @param out            the PrintWriter output object
212
   * @param conn           the Connection
213
   * @param siteScheduleID the primary key for the table
214
   * @param ldapDN          the site user's LDAP DN
215
   */
216
  private void dbRemove(PrintWriter out,
217
                        Connection conn,
218
                        int siteScheduleID,
219
                        String ldapDN
220
                       ) {
221
    String query = "DELETE FROM HARVEST_SITE_SCHEDULE WHERE " +
222
                   "SITE_SCHEDULE_ID=" + siteScheduleID;
223
    int nRecords = 0;
224
		Statement stmt;
225
     
226
		try {
227
			stmt = conn.createStatement();
228
      System.out.println(query);
229
      nRecords = stmt.executeUpdate(query);
230
      stmt.close();
231
      System.out.println(nRecords + " record(s) removed.");
232
      
233
      if (nRecords > 0) {
234
        out.println("Harvester registration removed for user " + ldapDN);
235
      }
236
      else {
237
        out.println("A problem was encountered removing registration for user " 
238
                    + ldapDN);
239
      }
240
		}
241
    catch(SQLException e) {
242
			System.out.println("SQLException: " + e.getMessage());
243
		}
244
   }
245
   
246

    
247
  /**
248
   * Updates a record in the HARVEST_SITE_SCHEDULE table.
249
   * 
250
   * @param out             the PrintWriter output object
251
   * @param conn            the Connection
252
   * @param siteScheduleID  the primary key for the table
253
   * @param contactEmail    contact email address of the site user
254
   * @param documentListURL the URL of the harvester document list at the site
255
   * @param ldapDN          the site user's LDAP DN
256
   * @param ldapPwd         the site user's LDAP password
257
   * @param unit            the update frequency unit, e.g. "days", "weeks"
258
   * @param updateFrequency the update frequency, an integer in range 1-99
259
   * @param dateLastHarvest the date of last harvest, 
260
   *                        e.g. "2004-04-30 00:00:00.0" or ""
261
   */
262
   private void dbUpdate(PrintWriter out,
263
                         Connection conn,
264
                         int siteScheduleID,
265
                         String contactEmail,
266
                         String documentListURL,
267
                         String ldapDN,
268
                         String ldapPwd,
269
                         String unit,
270
                         int updateFrequency,
271
                         String dateLastHarvest
272
                        ) {
273
    String dateNextHarvest;
274
    long delta;
275
    Date dlh;                          // Date of last harvest
276
    Date dnh;                          // Date of next harvest
277
    Date now = new Date();             // Today's date
278
    SimpleDateFormat readFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
279
    SimpleDateFormat writeFormat = new SimpleDateFormat("dd-MMM-yyyy");
280
		Statement stmt;
281
    long timeLastHarvest;
282
    long timeNextHarvest;
283
    long timeNow = now.getTime();
284
    
285
    // Calculate the value of delta, the number of milliseconds between the
286
    // last harvest date and the next harvest date.
287
    delta = updateFrequency * millisecondsPerDay;
288
    
289
    if (unit.equals("weeks")) {
290
      delta *= 7;
291
    }
292
    else if (unit.equals("months")) {
293
      delta *= 30;
294
    }
295

    
296
    if (dateLastHarvest.equals("")) {
297
      timeNextHarvest = timeNow;
298
    }
299
    else {
300
      try {
301
        dlh = readFormat.parse(dateLastHarvest);
302
        timeLastHarvest = dlh.getTime();
303
        timeNextHarvest = timeLastHarvest + delta;
304
        timeNextHarvest = Math.max(timeNextHarvest, timeNow);
305
      }
306
      catch (ParseException e) {
307
        System.out.println("Error parsing date: " + dateLastHarvest +
308
                           " " + e.getMessage());
309
        timeNextHarvest = timeNow;
310
      }
311
    }
312
    
313
    dnh = new Date(timeNextHarvest);
314
    dateNextHarvest = writeFormat.format(dnh);
315
	
316
		try {
317
			stmt = conn.createStatement();							
318
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET CONTACT_EMAIL=" +
319
                         quoteString(contactEmail) +
320
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
321
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET DOCUMENTLISTURL=" +
322
                         quoteString(documentListURL) +
323
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
324
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET LDAPPWD=" +
325
                         quoteString(ldapPwd) +
326
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
327
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET UNIT=" +
328
                         quoteString(unit) +
329
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
330
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET UPDATEFREQUENCY=" +
331
                         updateFrequency +
332
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
333
			stmt.executeUpdate("UPDATE HARVEST_SITE_SCHEDULE SET DATENEXTHARVEST=" +
334
                         quoteString(dateNextHarvest) +
335
                         " WHERE SITE_SCHEDULE_ID = " + siteScheduleID);
336
			stmt.close();
337
      reportResults(out, ldapDN, contactEmail, documentListURL, updateFrequency,
338
                    unit, dateNextHarvest);
339
		}
340
    catch(SQLException e) {
341
			System.out.println("SQLException: " + e.getMessage());
342
		}
343
     
344
  }
345
   
346

    
347
  /**
348
   * Handles GET method requests. Displays the current registration info for
349
   * this user (if any), then allows the user to make changes and register or
350
   * unregister.
351
   * 
352
   * @param req                the request
353
   * @param res                the response
354
   * @throws ServletException
355
   * @throws IOException
356
   */
357
  public void doGet(HttpServletRequest req, HttpServletResponse res)
358
                               throws ServletException, IOException {
359
    Connection conn = getConnection();
360
    String contactEmail = "";
361
    String documentListURL = "http://";
362
    HttpSession httpSession;
363
    String ldapDN;
364
    String ldapPwd;
365
    String query;
366
    int siteScheduleID;
367
		Statement stmt;
368
    String unit = "days";
369
    int updateFrequency = 1;
370

    
371
    httpSession = req.getSession(false);
372
    
373
    if (httpSession == null) {
374
      System.out.println("User did not log in.");
375
      return;
376
    }
377

    
378
    // The user name and password are stored as session attributes by the
379
    // HarvesterRegistrationLogin servlet.
380
    ldapDN = (String) httpSession.getAttribute("ldapDN");
381
    ldapPwd = (String) httpSession.getAttribute("ldapPwd");
382

    
383
    siteScheduleID = getSiteScheduleID(conn, ldapDN);
384

    
385
    // If the user is already registered, query the existing values and
386
    // initialize the form with them.
387
    if (siteScheduleID != 0) {
388
      query = "SELECT * FROM HARVEST_SITE_SCHEDULE WHERE SITE_SCHEDULE_ID=" +
389
              siteScheduleID;
390
      
391
		  try {
392
			  stmt = conn.createStatement();							
393
			  ResultSet rs = stmt.executeQuery(query);
394
	
395
			  while (rs.next()) {
396
          contactEmail = rs.getString("CONTACT_EMAIL");
397
          documentListURL = rs.getString("DOCUMENTLISTURL");
398
          updateFrequency = rs.getInt("UPDATEFREQUENCY");
399
          unit = rs.getString("UNIT");
400
        }
401

    
402
			  stmt.close();	
403
		  }
404
      catch (SQLException ex) {
405
			  System.out.println("SQLException: " + ex.getMessage());
406
		  }
407
    }
408

    
409
    res.setContentType("text/html");
410
    PrintWriter out = res.getWriter();
411

    
412
    // Print the registration form    
413
    out.println("<HTML>");
414
    out.println("<HEAD>");
415
    out.println("<TITLE>Metacat Harvester Registration</TITLE>");
416
    out.println("</HEAD>");
417
    out.println("<BODY>");
418
    out.println("<H2><B>Metacat Harvester Registration</B></H2>");
419
    out.println("<FORM METHOD=POST>");   // posts to itself
420
    out.println("To register or changes values, enter all values ");
421
    out.println("below and click <B>Register</B>.<BR>");
422
    out.println("To unregister, simply click <B>Unregister</B>.<BR>");
423
    out.println("<BR><BR>");
424
    out.println("<pre>Email address:             </pre>");
425
    out.println("<INPUT TYPE=TEXT NAME=contactEmail VALUE=");
426
    out.println(contactEmail + ">");
427
    out.println("<BR><BR>");
428
    out.println("<pre>Harvest Document List URL: </pre>");
429
    out.println("<INPUT TYPE=TEXT NAME=documentListURL VALUE=");
430
    out.println(documentListURL + ">");
431
    out.println("<BR><BR>");
432
    out.println("<pre>Harvest Frequency (1-99):  </pre>");
433
    out.println("<INPUT TYPE=TEXT NAME=updateFrequency ");
434
    out.println("MAXLENGTH=2 SIZE=2 VALUE=");
435
    out.println(updateFrequency + ">");
436
    out.println("<BR><BR>");
437
    out.println("<pre>Unit:                      </pre>");
438
    out.println("<INPUT TYPE=RADIO ");
439
    if (unit.equals("days")) out.println("CHECKED ");
440
    out.println("NAME=unit VALUE=days>day(s)");
441
    out.println("<INPUT TYPE=RADIO ");
442
    if (unit.equals("weeks")) out.println("CHECKED ");
443
    out.println("NAME=unit VALUE=weeks>week(s)");
444
    out.println("<INPUT TYPE=RADIO ");
445
    if (unit.equals("months")) out.println("CHECKED ");
446
    out.println("NAME=unit VALUE=months>month(s)");
447
    out.println("<BR><BR><BR>");
448
    out.println("<INPUT TYPE=SUBMIT NAME=register VALUE=Register>");
449
    out.println("<INPUT TYPE=SUBMIT NAME=unregister VALUE=Unregister>");
450
    out.println("</BODY>");
451
    out.println("</HTML>");
452
  }
453

    
454

    
455
  /**
456
   * Handles POST method requests. Reads values as entered by the user in the
457
   * harvester registration form and checks them for validity. Then either 
458
   * inserts, updates, or removes a record in the HARVEST_SITE_SCHEDULE table.
459
   * 
460
   * @param req                the request
461
   * @param res                the response
462
   * @throws ServletException
463
   * @throws IOException
464
   */
465
  public void doPost(HttpServletRequest req, HttpServletResponse res)
466
                               throws ServletException, IOException {
467
    Connection conn = getConnection();
468
    int maxValue;
469
    boolean remove = false;        // if true, remove record
470
    int siteScheduleID;
471
    String contactEmail;
472
    String dateLastHarvest;
473
    String dateNextHarvest;
474
    String documentListURL;
475
    HttpSession httpSession;
476
    String ldapDN;
477
    String ldapPwd;
478
    PrintWriter out;
479
    ParameterParser parameterParser = new ParameterParser(req);
480
    String register;
481
    String unit;
482
    String unregister;
483
    int updateFrequency;
484
    boolean validValues;
485

    
486
    httpSession = req.getSession(false);
487
    
488
    if (httpSession == null) {
489
      System.out.println("User did not log in.");
490
      return;
491
    }
492

    
493
    // The user name and password are stored as session attributes by the
494
    // HarvesterRegistrationLogin servlet
495
    ldapDN = (String) httpSession.getAttribute("ldapDN");
496
    ldapPwd = (String) httpSession.getAttribute("ldapPwd");
497

    
498
    contactEmail = parameterParser.getStringParameter("contactEmail", "None");
499
    documentListURL = parameterParser.getStringParameter("documentListURL", "");
500
    unit = parameterParser.getStringParameter("unit", "days");
501
    updateFrequency = parameterParser.getIntParameter("updateFrequency", 1);
502
    register = parameterParser.getStringParameter("register", "");
503
    unregister = parameterParser.getStringParameter("unregister", "");
504
    remove = (unregister.equalsIgnoreCase("Unregister"));
505
    siteScheduleID = getSiteScheduleID(conn, ldapDN);
506
    dateLastHarvest = getDateLastHarvest(conn, siteScheduleID);
507

    
508
    res.setContentType("text/plain");
509
    out = res.getWriter();
510

    
511
    if (!remove) {    
512
      validValues = checkValues(out, documentListURL, updateFrequency);
513
      
514
      if (!validValues) {
515
        return;
516
      }
517
    }
518
    
519
    if (siteScheduleID == 0) {
520
      if (remove) {
521
        // The user clicked Unregister, but no existing record was found
522
        System.out.println("Unable to remove record for user " + ldapDN);
523
        System.out.println("No matching record found in HARVEST_SITE_SCHEDULE");
524
        out.println("No record found for user " + ldapDN + ".");
525
        out.println("Since you were not registered, no action was taken.");
526
      }
527
      else {
528
        maxValue = getMaxValue(conn,
529
                               "HARVEST_SITE_SCHEDULE",
530
                               "SITE_SCHEDULE_ID");
531
        siteScheduleID = maxValue + 1;
532
        dbInsert(out, conn, siteScheduleID, contactEmail, documentListURL,
533
                 ldapDN, ldapPwd, unit, updateFrequency);
534
      }
535
    }
536
    else {
537
      // Either update or remove an existing record
538
      if (remove) {
539
        dbRemove(out, conn, siteScheduleID, ldapDN);
540
      }
541
      else {
542
        dbUpdate(out, conn, siteScheduleID, contactEmail, documentListURL,
543
                 ldapDN, ldapPwd, unit, updateFrequency, dateLastHarvest);
544
      }
545
    }
546
    
547
    closeConnection(conn);
548
  }
549
  
550

    
551
  /**
552
   * Gets a database connection.
553
   * 
554
   * @return  conn, the Connection object
555
   */
556
  private Connection getConnection() {
557
    Connection conn = null;
558
    SQLWarning warn;
559

    
560
    // Make the database connection
561
    try {
562
      System.out.println("Getting connection to Harvester tables");
563
      conn = DriverManager.getConnection(defaultDB, user, password);
564

    
565
      // If a SQLWarning object is available, print its warning(s).
566
      // There may be multiple warnings chained.
567
      warn = conn.getWarnings();
568
      
569
      if (warn != null) {
570
        while (warn != null) {
571
          System.out.println("SQLState: " + warn.getSQLState());
572
          System.out.println("Message:  " + warn.getMessage());
573
          System.out.println("Vendor: " + warn.getErrorCode());
574
          System.out.println("");
575
          warn = warn.getNextWarning();
576
        }
577
      }
578
    }
579
    catch (SQLException e) {
580
      System.out.println("Database access failed " + e);
581
    }
582
    
583
    return conn;
584
  }
585

    
586

    
587
  /**
588
   * Gets the date of last harvest value from the HARVEST_SITE_SCHEDULE table,
589
   * given a siteScheduleID value (the primary key).
590
   * 
591
   * @param  conn            the connection
592
   * @param  siteScheduleID  the primary key
593
   * @return dateLastHarvest the string stored in the table, e.g.
594
   *                         "2004-04-30 00:00:00.0" or ""
595
   */
596
  private String getDateLastHarvest(Connection conn, int siteScheduleID) {
597
    String dateLastHarvest = "";
598
    String query = "SELECT DATELASTHARVEST FROM HARVEST_SITE_SCHEDULE " +
599
                   "WHERE SITE_SCHEDULE_ID=" + siteScheduleID;
600
		Statement stmt;
601
    
602
		try {
603
			stmt = conn.createStatement();							
604
			ResultSet rs = stmt.executeQuery(query);
605
	
606
			while (rs.next()) {
607
        dateLastHarvest = rs.getString("DATELASTHARVEST");
608
        if (rs.wasNull()) {
609
          dateLastHarvest = "";  // Convert null value to empty string
610
        }
611
			}
612

    
613
			stmt.close();	
614
		}
615
    catch (SQLException ex) {
616
			System.out.println("SQLException: " + ex.getMessage());
617
		}
618
    
619
    return dateLastHarvest;
620
  }
621
  
622

    
623
  /** 
624
   * Gets the maximum value of an integer field from a table, given the table
625
   * name and the field name.
626
   * 
627
   * @param tableName  the database table name
628
   * @param fieldName  the field name of the integer field in the table
629
   * @return  the maximum integer stored in the fieldName field of tableName
630
   */
631
  private int getMaxValue(Connection conn, String tableName, String fieldName) {
632
    int maxValue = 0;
633
    int fieldValue;
634
		String query = "SELECT " + fieldName + " FROM " + tableName;
635
		Statement stmt;
636
    
637
		try {
638
			stmt = conn.createStatement();							
639
			ResultSet rs = stmt.executeQuery(query);
640
	
641
			while (rs.next()) {
642
				fieldValue = rs.getInt(fieldName);
643
        maxValue = Math.max(maxValue, fieldValue);
644
			}
645
	
646
			stmt.close();	
647
		} 
648
    catch (SQLException ex) {
649
			System.out.println("SQLException: " + ex.getMessage());
650
		}
651
    
652
    return maxValue;
653
  }
654
  
655

    
656
  /**
657
   * Gets the siteScheduleID value from the HARVEST_SITE_SCHEDULE table, given
658
   * the value of the ldapDN field.
659
   * 
660
   * @param conn   the database connection
661
   * @param ldapDN the ldap DN string
662
   * @return  siteScheduleID, an integer, the primary key
663
   */
664
  private int getSiteScheduleID(Connection conn, String ldapDN) {
665
    String ldapDNValue;                       // value of LDAPDN field
666
    String query = "SELECT * FROM HARVEST_SITE_SCHEDULE";
667
    int siteScheduleID = 0;
668
		Statement stmt;
669
    
670
		try {
671
			stmt = conn.createStatement();							
672
			ResultSet rs = stmt.executeQuery(query);
673
	
674
			while (rs.next()) {
675
        ldapDNValue = rs.getString("LDAPDN");
676

    
677
        if (ldapDNValue.equalsIgnoreCase(ldapDN)) {
678
				  siteScheduleID = rs.getInt("SITE_SCHEDULE_ID");
679
        }
680
			}
681

    
682
			stmt.close();	
683
		}
684
    catch (SQLException ex) {
685
			System.out.println("SQLException: " + ex.getMessage());
686
		}
687
    
688
    return siteScheduleID;
689
  }
690
  
691

    
692
  /**
693
   * Initializes the servlet. Reads properties and initializes object fields.
694
   * 
695
   * @throws ServletException
696
   */
697
  public void init(ServletConfig config) throws ServletException {
698
    String database;
699
    String dbDriver = "";
700
    String dirPath;
701
    Options options = null;
702

    
703
    super.init(config);
704
    this.config = config;
705
    this.context = config.getServletContext();
706
    dirPath = context.getRealPath(CONFIG_DIR);
707
    File propertyFile = new File(dirPath, CONFIG_NAME);
708
    
709
    try {
710
      options = Options.initialize(propertyFile);
711
    }
712
    catch (IOException e) {
713
      System.out.println("Error in loading options: " + e.getMessage());
714
    }
715
    
716
    dbDriver = options.getOption("dbDriver");
717
    defaultDB = options.getOption("defaultDB");
718
    password = options.getOption("password");
719
    user = options.getOption("user");
720

    
721
    // Load the jdbc driver
722
    try {
723
      Class.forName(dbDriver);
724
    }
725
    catch (ClassNotFoundException e) {
726
      System.out.println("Can't load driver " + e);
727
    } 
728
  }
729

    
730

    
731
  /**
732
   * Surrounds a string with single quotes.
733
   * @param str  the original string
734
   * @return     the quoted string
735
   */
736
  private String quoteString(String str) {
737
    return "'" + str + "'";
738
  }
739
  
740
  
741
  /**
742
   * Reports the results of an insert or update to the client.
743
   * 
744
   * @param out               the PrintWriter
745
   * @param ldapDN            the LDAP DN string
746
   * @param contactEmail      the email address of the site contact
747
   * @param documentListURL   the URL of the harvester document list at the site
748
   * @param updateFrequency   the harvest update frequency
749
   * @param unit              the unit (e.g. "days", "weeks", "months"
750
   * @param dateNextHarvest   the date of the next scheduled harvest
751
   */
752
  private void reportResults(PrintWriter out,
753
                             String ldapDN,
754
                             String contactEmail,
755
                             String documentListURL,
756
                             int updateFrequency,
757
                             String unit,
758
                             String dateNextHarvest
759
                            ) {
760
    out.println("Harvester registration updated for " + ldapDN);
761
    out.println("  Email Address:             " + contactEmail);
762
    out.println("  Harvest Document List URL: " + documentListURL);
763
    out.println("  Harvest Frequency:         " + updateFrequency);
764
    out.println("  Unit:                      " + unit);
765
    out.println("");
766
    out.println("Next scheduled harvest date: " + dateNextHarvest);
767
  }
768
  
769
}
(6-6/9)