greenstone.org greenstone wiki greenstone trac planet greenstone

Changeset 17907

Show
Ignore:
Timestamp:
2008-11-24 15:43:01 (2 months ago)
Author:
ak19
Message:

Inserted code to first look for whether the db file is already there. If not, it looks for the txtgz file. If that exists, it unzips the txtgz file and converts it to the ldb (bdb?) database file. The same process was followed in the original Greenstone2 code (gdbmclass.cpp in common-src/src/lib).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • greenstone3/trunk/src/java/org/greenstone/gsdl3/util/GDBMWrapper.java

    r16869 r17907  
    2626 
    2727import java.io.UnsupportedEncodingException; 
     28import java.io.File; 
    2829 
    2930/** java wrapper class for gdbm - uses Java-GDBM written by Martin Pool 
     
    4243     NEWDB - read/write access, db should be replaced if exists 
    4344  */ 
    44    
    45  
     45     
     46     
    4647    protected GdbmFile db_=null; 
    47  
     48     
    4849  /** open the database filename, with mode mode - uses the constants 
    4950      above, eg GdbmFile.WRITER */ 
     
    5859      mode = GdbmFile.READER; 
    5960    } 
    60        
    6161    try { 
    62       if (db_!=null) { 
    63         db_.close(); 
    64       } 
    65       db_ = new GdbmFile(filename, mode); 
     62        if (db_!=null) { 
     63            db_.close(); 
     64        } 
     65 
     66        // The java version of the C++ code in common-src/src/lib/gdbmclass.cpp 
     67        if(mode == GdbmFile.READER) { 
     68            // Looking to read in the database 
     69            // => check to see if .ldb/.bdb file already there 
     70            // if not (first time) then generate using txt2db 
     71            if (!new File(filename).exists()) { 
     72                logger.warn("Database file " + filename + " does not exist. Looking for txtgz version of db file."); 
     73                 
     74                // need to generate architecture native GDBM file using txt2db 
     75                 
     76                // replace sought after gdbm filename ext with ".txt.gz" 
     77                 
     78                int extension = filename.lastIndexOf('.'); 
     79                String txtgzFilename = filename.substring(0, extension) + ".txt.gz"; 
     80                if(new File(txtgzFilename).exists()) {               
     81                    // Test to make sure Perl is on the path 
     82                    // On Linux, the output of the test goes to STDOUT so redirect it to STDERR 
     83                    String cmdTest = "perl -v 2>&1";                 
     84                    //String cmdTest = "echo %PATH%"; 
     85                    int returnValue = Processing.runProcess(cmdTest); 
     86                    if (returnValue != 0) { 
     87                        logger.error("Tried to find Perl. Return exit value of running "  
     88                                     + cmdTest + ": " +  returnValue + ", (expected this to be 0)"); 
     89                        logger.error("Check that Perl is set in your PATH environment variable."); 
     90                        //log.error("At present, PATH=" + System.getenv("PATH")); 
     91                    } 
     92                     
     93                    String cmd = "perl -S txtgz-to-gdbm.pl \"" + txtgzFilename + "\" \"" + filename + "\""; 
     94                    returnValue = Processing.runProcess(cmd); 
     95                    // For some reason, launching this command with gsdl_system() still returns 1 
     96                    // even when it returns 0 when run from the command-line. We can check whether 
     97                    // we succeeded by looking at whether the output database file was created. 
     98                    if (returnValue != 0) { 
     99                        logger.warn("Warning, non-zero return value on running command \"" + cmd + "\": " + returnValue); 
     100                        if (!new File(filename).exists()) { 
     101                            logger.error("Tried to run command \"" + cmd + "\", but it failed"); 
     102                        } 
     103                    }                
     104                } 
     105            } 
     106        } 
     107 
     108        db_ = new GdbmFile(filename, mode); 
    66109    } catch ( GdbmException e) { // the database wasn't opened or created 
    67       logger.error("couldn't open database "+filename); 
    68       return false; 
     110       logger.error("couldn't open database "+filename); 
     111       return false; 
    69112    }  
    70113    db_.setKeyPacking(new StringPacking());