/*
* GSFile.java
* Copyright (C) 2002 New Zealand Digital Library, http://www.nzdl.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.greenstone.gsdl3.util;
import java.io.File;
import org.apache.soap.encoding.soapenc.Base64;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.lang.ClassLoader; // to find files on the class path
import java.net.URL;
/**
* GSFile - utility class for Greenstone.
*
* all file paths are created here
* also has file utility methods
*
* @author Katherine Don
* @version $Revision: 5109 $
* @see File
*/
public class GSFile {
static public String dtdDir(String gsdl3_home) {
return gsdl3_home + File.separatorChar + "resources" +
File.separatorChar + "dtd";
}
/** site config file path */
static public String siteConfigFile(String site_home) {
return site_home + File.separatorChar+"siteConfig.xml";
}
/** interface config file path */
static public String interfaceConfigFile(String interface_home) {
return interface_home + File.separatorChar+"interfaceConfig.xml";
}
/** collection directory path */
static public String collectDir(String site_home) {
return site_home+File.separatorChar+"collect";
}
/** collection config file path*/
static public String collectionConfigFile(String site_home,
String collection_name) {
return site_home+File.separatorChar+"collect"+
File.separatorChar+collection_name+
File.separatorChar+"etc"+
File.separatorChar+"collectionConfig.xml";
}
/** collection init file path*/
static public String collectionInitFile(String site_home,
String collection_name) {
return site_home+File.separatorChar+"collect"+
File.separatorChar+collection_name+
File.separatorChar+"etc"+
File.separatorChar+"collectionInit.xml";
}
/** collection build config file path*/
static public String collectionBuildConfigFile(String site_home,
String collection_name ) {
return site_home+File.separatorChar+"collect"+
File.separatorChar+collection_name+
File.separatorChar+"index"+
File.separatorChar+"buildConfig.xml";
}
/** collection build config file path*/
static public String collectionBuildConfigFileBuilding(String site_home,
String collection_name ) {
return site_home+File.separatorChar+"collect"+
File.separatorChar+collection_name+
File.separatorChar+"building"+
File.separatorChar+"buildConfig.xml";
}
/** XML Transform directory path */
static public String xmlTransformDir(String interface_home) {
return interface_home+File.separatorChar+"transform";
}
/** collection base directory path */
static public String collectionBaseDir(String site_home,
String collection_name) {
return site_home+File.separatorChar+"collect"+
File.separatorChar+collection_name;
}
/** collection building directory path */
static public String collectionBuildDir(String site_home,
String collection_name) {
return collectionBaseDir(site_home, collection_name) +
File.separatorChar+"building";
}
/** collection building directory path */
static public String collectionImportDir(String site_home,
String collection_name) {
return collectionBaseDir(site_home, collection_name) +
File.separatorChar+"import";
}
/** collection building directory path */
static public String collectionIndexDir(String site_home,
String collection_name) {
return collectionBaseDir(site_home, collection_name) +
File.separatorChar+"index";
}
/** text path (for doc retrieval) relative to collectionBaseDir */
static public String collectionTextPath(String collection_name) {
return "index"+File.separatorChar+"text"+File.separatorChar+
collection_name;
}
/** index path (for querying) relative to collectionBaseDir */
static public String collectionIndexPath(String collection_name,
String index_name) {
return "index"+File.separatorChar+index_name+File.separatorChar+
collection_name;
}
/** absolute path for an associated file */
static public String assocFileAbsolutePath(String site_home,
String collection_name,
String assoc_file_path,
String filename) {
return collectionBaseDir(site_home, collection_name)+
File.separatorChar+"index"+File.separatorChar+
"assoc"+File.separatorChar+assoc_file_path+
File.separatorChar+filename;
}
static public String siteHome(String gsdl3_home, String site_name) {
return gsdl3_home + File.separatorChar + "web" +
File.separatorChar + "sites" +
File.separatorChar +site_name;
}
static public String interfaceHome(String gsdl3_home,
String interface_name) {
return gsdl3_home + File.separatorChar + "web" +
File.separatorChar + "interfaces" +
File.separatorChar + interface_name;
}
static public String siteStylesheetFile(String site_home,
String filename) {
return site_home+File.separatorChar + "transform" +
File.separatorChar + filename;
}
/** returns the absolute path to a stylesheet
* stylesheets are looked for in the following order
* collect-specific,
* site-specific, interface-specific, default
* returns null if the file cannot be found
*
* this is not so good because sites may be on a different computer */
static public String stylesheetFile(String gsdl3_home,
String site_name,
String interface_name,
String collection,
String filename) {
String site_home = siteHome(gsdl3_home, site_name);
// try collection first
File stylesheet = null;
if (!collection.equals("")) {
String coll_home = collectionBaseDir(site_home, collection);
stylesheet = new File(coll_home +File.separatorChar+
"transform"+File.separatorChar+filename);
if (stylesheet.exists()) {
return stylesheet.getPath();
}
}
// try site one next
stylesheet = new File(site_home +File.separatorChar+
"transform"+File.separatorChar+filename);
if (stylesheet.exists()) {
return stylesheet.getPath();
}
// try current interface
String interface_home = interfaceHome(gsdl3_home,
interface_name);
stylesheet = new File(interface_home+File.separatorChar+
"transform"+File.separatorChar+filename);
if (stylesheet.exists()) {
return stylesheet.getPath();
}
// try default interface
interface_home = interfaceHome(gsdl3_home, "default");
stylesheet = new File(interface_home+File.separatorChar+
"transform"+File.separatorChar+filename);
if (stylesheet.exists()) {
return stylesheet.getPath();
}
// cant find it
return null;
}
/** returns the path to the stylesheet used to transform config file
* format statements*/
public static String configFileFormatStylesheet() {
URL url = ClassLoader.getSystemResource("config_format.xsl");
if (url == null) {
return "";
}
return url.getFile();
}
/** base directory for phind data */
public static String phindBaseDir(String site_home, String coll_name,
String phind_index) {
return site_home + File.separatorChar +
"collect" + File.separatorChar +
coll_name + File.separatorChar +
"index" + File.separatorChar +
"phind"+phind_index;
}
/** the gdbm database file -
* note, need to change extension depending on OS */
static public String GDBMDatabaseFile(String site_home,
String collection_name) {
return site_home + File.separatorChar +
"collect" + File.separatorChar +
collection_name + File.separatorChar +
"index" + File.separatorChar + "text" + File.separatorChar +
collection_name + ".ldb";
}
// some file utility methods
/** read in a file and encode it using base64
* encoded data returned as a String */
static public String base64EncodeFromFile(String in_filename) {
byte [] data=null;
try {
data = readFile(in_filename);
} catch (Exception e) {
System.err.println("GSFile.base64EncodeFromFile: couldn't read the file");
}
String encodedString = Base64.encode(data);
return encodedString;
}
/** decode some base64 data, and write it to the specified file */
static public boolean base64DecodeToFile(String data, String out_filename) {
try {
byte[] buffer=Base64.decode(data);
writeFile(buffer, out_filename);
} catch (Exception e) {
System.err.println("GSFile.base64DecodeToFile: file opening/closing errors"+e.getMessage());
return false;
}
return true;
}
/** read in a file to a byte array */
public static byte[] readFile(String filename) throws IOException {
File file = new File(filename);
BufferedInputStream bis = new BufferedInputStream(new
FileInputStream(file));
int bytes = (int) file.length();
byte[] buffer = new byte[bytes];
int readBytes = bis.read(buffer);
bis.close();
return buffer;
}
/** write a byte array to a file */
public static void writeFile(byte [] buffer, String filename) throws IOException {
File file = new File(filename);
BufferedOutputStream bos = new BufferedOutputStream(new
FileOutputStream(file));
bos.write(buffer);
bos.close();
}
public static boolean deleteFile(File f) {
if (f.isDirectory()) {
File[] files = f.listFiles();
for (int i=0; files!=null && i