/*
* 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 org.apache.axis.encoding.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;
import java.util.ArrayList;
/**
* GSFile - utility class for Greenstone.
*
* all file paths are created here
* also has file utility methods
*
* @author Katherine Don
* @version $Revision: 10650 $
* @see File
*/
public class GSFile {
/** 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 collectionConfigFile(collectionBaseDir(site_home, collection_name));
}
static public String collectionConfigFile(String collection_home) {
return collectionEtcDir(collection_home) +
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 collectionBuildConfigFileBuilding(collectionBaseDir(site_home, collection_name));
}
static public String collectionBuildConfigFileBuilding(String collection_home ) {
return collection_home+
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 archive directory path */
static public String collectionArchiveDir(String site_home,
String collection_name) {
return collectionArchiveDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionArchiveDir(String collection_home) {
return collection_home+File.separatorChar+"archives";
}
/** collection building directory path */
static public String collectionBuildDir(String site_home,
String collection_name) {
return collectionBuildDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionBuildDir(String collection_home) {
return collection_home+File.separator+"building";
}
/** collection building directory path */
static public String collectionEtcDir(String site_home,
String collection_name) {
return collectionEtcDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionEtcDir(String collection_home) {
return collection_home+File.separator+"etc";
}
/** collection building directory path */
static public String collectionImportDir(String site_home,
String collection_name) {
return collectionImportDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionImportDir(String collection_home) {
return collection_home + File.separatorChar+"import";
}
/** collection building directory path */
static public String collectionIndexDir(String site_home,
String collection_name) {
return collectionIndexDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionIndexDir(String collection_home) {
return collection_home + File.separatorChar+"index";
}
/** text path (for doc retrieval) relative to collectionBaseDir */
static public String collectionTextPath(String index_stem) {
return "index"+File.separatorChar+"text"+File.separatorChar+
index_stem;
}
/** index path (for querying) relative to collectionBaseDir */
static public String collectionIndexPath(String index_stem,
String index_name) {
return "index"+File.separatorChar+index_name+File.separatorChar+
index_stem;
}
/** collection resources directory path */
static public String collectionResourceDir(String site_home,
String collection_name) {
return collectionResourceDir(collectionBaseDir(site_home, collection_name));
}
static public String collectionResourceDir(String collection_home) {
return collection_home + File.separatorChar+"resources";
}
/** 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 + "sites" +
File.separatorChar +site_name;
}
static public String interfaceHome(String gsdl3_home,
String interface_name) {
return gsdl3_home + 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;
}
static public String collStylesheetFile(String site_home,
String coll_name,
String filename) {
return collectionBaseDir(site_home, coll_name) + File.separatorChar+
"transform" + File.separatorChar + filename;
}
/** returns the absolute path to a stylesheet
* stylesheets are looked for in the following places, in the
* following order:
* current collection, current site, current interface, base interfaces
* 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 collection,
String interface_name,
ArrayList base_interfaces,
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 base interface
if (base_interfaces==null || base_interfaces.size()==0) {
return null; // no base interfaces to look for
}
for (int i=0; i