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