/* * eXist Open Source Native XML Database * Copyright (C) 2001-06 The eXist Project * http://exist-db.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * $Id$ */ package org.exist.webstart; import java.io.File; import org.apache.log4j.Logger; import org.exist.start.LatestFileResolver; /** * Class for managing webstart jar files. * * @author Dannes Wessels */ public class JnlpJarFiles { private static Logger logger = Logger.getLogger(JnlpJarFiles.class); // Holders for jar files private File[] _coreJars; private File _mainJar; // Names of core jar files sans ".jar" extension. // Use %latest% token in place of a version string. private String jars[] = new String[]{ "xmldb", "xmlrpc-common-%latest%", "xmlrpc-client-%latest%", "ws-commons-util-%latest%", "commons-pool-%latest%", "excalibur-cli-%latest%", "jEdit-syntax", "jline-%latest%", "log4j-%latest%", "slf4j-api-%latest%", "slf4j-log4j12-%latest%", "stax-api-%latest%", "sunxacml-%latest%" }; // Resolves jar file patterns from jars[]. private LatestFileResolver jarFileResolver = new LatestFileResolver(); /** * Get jar file specified by file pattern. * @param folder Directory containing the jars. * @param jarFileBaseName Name of jar file, including %latest% token if * necessary sans .jar file extension. * @return File object of jar file, null if not found. */ public File getJar(File folder, String jarFileBaseName){ String fileToFind = folder.getAbsolutePath() + File.separatorChar + jarFileBaseName + ".jar"; String resolvedFile = jarFileResolver.getResolvedFileName( fileToFind ); File jar = new File(resolvedFile); if (jar.exists()) { logger.debug( "Found match: " + resolvedFile + " for file pattern: " + fileToFind ); return jar; } else { logger.warn("Could not resolve file pattern: " + fileToFind); return null; } } /** * Creates a new instance of JnlpJarFiles * * @param jnlpHelper */ public JnlpJarFiles(JnlpHelper jnlpHelper) { logger.info("Initializing jar files Webstart"); // Setup array CORE jars int nrCoreJars=jars.length; _coreJars = new File[nrCoreJars]; logger.debug("Number of webstart jars="+nrCoreJars); // Setup CORE jars for(int i=0;i<nrCoreJars;i++){ _coreJars[i]=getJar(jnlpHelper.getCoreJarsFolder(), jars[i]); } // Setup exist.jar _mainJar=new File(jnlpHelper.getExistJarFolder(), "exist.jar"); } /** * Get references to all "core" jar files. * @return Array of Files. */ public File[] getCoreJars() { return _coreJars; } /** * Get references to all "exist" jar files. * @return Reference to exist.jar. */ public File getMainJar() { return _mainJar; } /** * Setter for property mainJar. * @param mainJar New value of property mainJar. */ public void setMainJar(File mainJar) { _mainJar = mainJar; } /** * Get File reference of associated jar-file. * @param name * @return File reference to resource. */ public File getFile(String name){ File retVal=null; if(name.equals("exist.jar")){ retVal = _mainJar; } else { boolean found=false; int index=0; while(!found && index < _coreJars.length ){ if(_coreJars[index].getName().equals(name)){ found=true; retVal=_coreJars[index]; } else { index++; } } } return retVal; } }