/* * 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