/*************************************************************** * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * @author: Copyright (C) Tim Carver * ***************************************************************/ package ext.jemboss; import java.util.*; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.InetAddress; /** * * Contains all property information about the client * and the server. * */ public class JembossParams { /** denotes a server is OK */ static public final int SERVER_OK = 0; /** denotes a server is giving errors */ static public final int SERVER_ERR = 1; /** denotes a server is not responding */ static public final int SERVER_DOWN = 2; // these are the things that could be set private boolean useHTTPSProxy = false; private String useHTTPSProxyName = "useHTTPSProxy"; private boolean useProxy = false; private String useProxyName = "proxy.use"; private String proxyHost = "wwwcache"; private String proxyHostName = "proxy.host"; private int proxyPortNum = 8080; private String proxyPortNumName = "proxy.port"; //browser proxy /** use a separate proxy for browsing the web */ private boolean useBrowserProxy = false; /** property name for using separate proxy for browsing the web */ private String useBrowserProxyName = "browserProxy.use"; /** browser proxy host */ private String browserProxyHost = "wwwcache"; /** property name for browser proxy host */ private String browserProxyHostName = "browserProxy.host"; /** browser proxy port */ private int browserProxyPort = 8080; /** property name for browser proxy port */ private String browserProxyPortName = "browserProxy.port"; private boolean useTFM; private String useTFMName = "tfm.use"; /** use proxy authentication */ private boolean useProxyAuth = false; /** property name for using proxy authentication */ private String useProxyAuthName = "proxy.auth"; private String proxyAuthUser = ""; private String proxyAuthUserName = "proxy.user"; private String proxyAuthPasswd = ""; private String proxyAuthPasswdName = "proxy.passwd"; private boolean proxyOverride = false; private String proxyOverrideName = "proxy.override"; /** use unix authentication to run applications on the server */ private boolean useAuth = false; /** property name for using unix authentication */ private String useAuthName = "user.auth"; /** public services URL */ private String publicSoapURL = "http://anaplog.compbio.dundee.ac.uk:8080/axis/services"; /** property name for public services URL */ private String publicSoapURLName = "server.public"; /** private services URL */ private String privateSoapURL = "http://anaplog.compbio.dundee.ac.uk:8080/axis/services"; /** property name for private services URL */ private String privateSoapURLName = "server.private"; /** service name */ private String soapService = "JembossServer"; /** property name for service name */ private String soapServiceName = "VAMSAS Services"; /** private service name */ private String privateSoapService = "JembossServer"; /** property name for private service name */ private String privateSoapServiceName = "VAMSAS Services"; /** public service name */ private String publicSoapService = "JembossServer"; /** property name for public service name */ private String publicSoapServiceName = "VAMSAS Services"; //soap options private boolean debug = false; private String debugName = "jemboss.debug"; /** batch mode support */ private boolean hasBatchMode = true; /** property name for batch mode support */ private String hasBatchModeName = "jemboss.hasbatchmode"; /** interactive mode support */ private boolean hasInteractiveMode = true; /** property name for interactive mode support */ private String hasInteractiveModeName = "jemboss.hasinteractivemode"; /** current mode for running an application */ private String currentMode = "interactive"; /** property name for current mode */ private String currentModeName = "jemboss.mode"; // server lists for redundancy private String serverPublicList = ""; private String serverPublicListName = "server.publiclist"; private String serverPrivateList = ""; private String serverPrivateListName = "server.privatelist"; // we don't remember these perhaps we should for captive systems private String serviceUserName = "jalview"; private String serviceUserNameName = "user.name"; private char[] servicePasswd = null; /** services password */ private byte[] servicePasswdByte = null; Properties jembossSettings; // Internal flags to help in the dynamic evaluation of properties private boolean useJavaProxy = false; private String javaProxyPort = ""; private String javaProxyHost = ""; private boolean useJavaNoProxy = false; private String javaNoProxy = ""; private Vector javaNoProxyEntries; private int javaProxyPortNum = 8080; // structures for server redundancy private boolean publicServerFailOver = false; private boolean privateServerFailOver = false; private Hashtable serverStatusHash; private Vector publicServers; private Vector privateServers; /** Jemboss java server */ private static boolean jembossServer = false; /** property name for Jemboss java server */ private String jembossServerName = "jemboss.server"; /** cygwin */ private static String cygwin = null; /** property name for Jemboss java server */ private String cygwinName = "cygwin"; //EMBOSS directories /** plplot library location */ private String plplot = "/usr/local/share/EMBOSS/"; /** property name for plplot library location */ private String plplotName = "plplot"; /** emboss data location */ private String embossData = "/usr/local/share/EMBOSS/data/"; /** property name for emboss data location */ private String embossDataName = "embossData"; /** emboss binary location */ private String embossBin = "/usr/local/bin/"; /** property name for emboss binary location */ private String embossBinName = "embossBin"; /** emboss path environment variable */ private String embossPath = "/usr/bin/:/bin"; /** property name for emboss path environment variable */ private String embossPathName = "embossPath"; /** emboss environment */ private String embossEnvironment = ""; /** property name for emboss environment */ private String embossEnvironmentName = "embossEnvironment"; /** acd file location */ private String acdDirToParse = "/usr/local/share/EMBOSS/acd/"; /** property name for acd file location */ private String acdDirToParseName = "acdDirToParse"; //EMBOSS Application pages /** documentation URL */ private String embURL = "http://www.uk.embnet.org/Software/EMBOSS/Apps/"; /** property name for documentation URL */ private String embossURL = "embossURL"; // user properties /** user home directory */ private String userHome = System.getProperty("user.home"); /** property name for user home directory */ private String userHomeName = "user.home"; /** * * Loads and holds the properties * */ public JembossParams() { Properties defaults = new Properties(); ClassLoader cl = this.getClass().getClassLoader(); // initialize data structures serverStatusHash = new Hashtable(); publicServers = new Vector(); privateServers = new Vector(); // initialize settings from table above defaults.put(userHomeName,userHome); defaults.put(embossURL,embURL); defaults.put(plplotName,plplot); defaults.put(embossDataName,embossData); defaults.put(embossBinName,embossBin); defaults.put(embossPathName,embossPath); defaults.put(embossEnvironmentName,embossEnvironment); defaults.put(acdDirToParseName,acdDirToParse); defaults.put(useBrowserProxyName, new Boolean(useBrowserProxy).toString()); defaults.put(browserProxyHostName,browserProxyHost); defaults.put(browserProxyPortName,new Integer(browserProxyPort).toString()); defaults.put(useTFMName,new Boolean(useTFM).toString()); defaults.put(useProxyName, new Boolean(useProxy).toString()); defaults.put(useHTTPSProxyName, new Boolean(useHTTPSProxy).toString()); defaults.put(proxyHostName,proxyHost); defaults.put(proxyPortNumName, new Integer(proxyPortNum).toString()); defaults.put(useProxyAuthName, new Boolean(useProxyAuth).toString()); defaults.put(proxyAuthUserName, proxyAuthUser); defaults.put(proxyAuthPasswdName, proxyAuthPasswd); defaults.put(proxyOverrideName, new Boolean(proxyOverride).toString()); defaults.put(useAuthName, new Boolean(useAuth).toString()); defaults.put(publicSoapURLName, publicSoapURL); defaults.put(privateSoapURLName, privateSoapURL); defaults.put(privateSoapServiceName, privateSoapService); defaults.put(publicSoapServiceName, publicSoapService); defaults.put(debugName, new Boolean(debug).toString()); defaults.put(hasBatchModeName, new Boolean(hasBatchMode).toString()); defaults.put(hasInteractiveModeName, new Boolean(hasInteractiveMode).toString()); defaults.put(currentModeName, currentMode); defaults.put(serverPublicListName, serverPublicList); defaults.put(serverPrivateListName, serverPrivateList); defaults.put(serviceUserNameName, serviceUserName); // load into real settings jembossSettings = new Properties(defaults); // try out of the classpath try { jembossSettings.load(cl.getResourceAsStream("resources/jemboss.properties")); } catch (Exception e) { if(debug) System.out.println("Didn't find properties file in classpath."); } // override with local system settings loadIn(System.getProperty("user.dir")); // override with local user settings loadIn(System.getProperty("user.home")); // update our settings updateSettingsFromProperties(); if(System.getProperty("useHTTPSProxy") != null) if(System.getProperty("useHTTPSProxy").equalsIgnoreCase("true")) useHTTPSProxy=true; // set up for overrides javaNoProxyEntries = new Vector(); if(System.getProperty("proxyPort") != null) { if(System.getProperty("proxyHost") != null) { useJavaProxy = true; useProxy = useJavaProxy; useBrowserProxy = useJavaProxy; javaProxyPort = System.getProperty("proxyPort"); javaProxyPortNum = Integer.parseInt(javaProxyPort); javaProxyHost = System.getProperty("proxyHost"); browserProxyHost = javaProxyHost; browserProxyPort = javaProxyPortNum; if(System.getProperty("http.nonProxyHosts") != null) { useJavaNoProxy = true; javaNoProxy = System.getProperty("http.nonProxyHosts"); StringTokenizer tok = new StringTokenizer(javaNoProxy,"|"); while (tok.hasMoreTokens()) { String toks = tok.nextToken() + "/"; javaNoProxyEntries.add(toks); } } } } } /** * * Load a property from the jemboss.property file. * @param folder location of jemboss.property * */ private void loadIn(String folder) { FileInputStream in = null; try { String fs = System.getProperty("file.separator"); in = new FileInputStream(folder + fs + "jemboss.properties"); jembossSettings.load(in); } catch (java.io.FileNotFoundException e) { in = null; if(debug) System.out.println("Can't find properties file in"+folder+"."+ " Using defaults."); } catch (java.io.IOException e) { if(debug) System.out.println("Can't read properties file. " + "Using defaults."); } finally { if (in != null) { try { in.close(); } catch (java.io.IOException e) { } in = null; } } } /** * * Update the property settings for jembossSettings. * */ protected void updateSettingsFromProperties() { try { String tmp; userHome = jembossSettings.getProperty(userHomeName); embURL = jembossSettings.getProperty(embossURL); plplot = jembossSettings.getProperty(plplotName); embossData = jembossSettings.getProperty(embossDataName); embossBin = jembossSettings.getProperty(embossBinName); embossPath = jembossSettings.getProperty(embossPathName); embossEnvironment = jembossSettings.getProperty(embossEnvironmentName); acdDirToParse = jembossSettings.getProperty(acdDirToParseName); tmp = jembossSettings.getProperty(jembossServerName); jembossServer = new Boolean(tmp).booleanValue(); cygwin = jembossSettings.getProperty(cygwinName); tmp = jembossSettings.getProperty(useHTTPSProxyName); useHTTPSProxy = new Boolean(tmp).booleanValue(); tmp = jembossSettings.getProperty(useProxyName); useProxy = new Boolean(tmp).booleanValue(); proxyHost = jembossSettings.getProperty(proxyHostName); tmp = jembossSettings.getProperty(proxyPortNumName); proxyPortNum = Integer.parseInt(tmp); tmp = jembossSettings.getProperty(useBrowserProxyName); useBrowserProxy = new Boolean(tmp).booleanValue(); browserProxyHost = jembossSettings.getProperty(browserProxyHostName); tmp = jembossSettings.getProperty(browserProxyPortName); browserProxyPort = Integer.parseInt(tmp); tmp = jembossSettings.getProperty(useTFMName); useTFM = new Boolean(tmp).booleanValue(); tmp = jembossSettings.getProperty(useProxyAuthName); useProxyAuth = new Boolean(tmp).booleanValue(); proxyAuthUser = jembossSettings.getProperty(proxyAuthUserName); proxyAuthPasswd = jembossSettings.getProperty(proxyAuthPasswdName); tmp = jembossSettings.getProperty(proxyOverrideName); proxyOverride = new Boolean(tmp).booleanValue(); tmp = jembossSettings.getProperty(useAuthName); useAuth = new Boolean(tmp).booleanValue(); publicSoapURL = jembossSettings.getProperty(publicSoapURLName); privateSoapURL = jembossSettings.getProperty(privateSoapURLName); soapService = jembossSettings.getProperty(soapServiceName); privateSoapService = jembossSettings.getProperty(privateSoapServiceName); publicSoapService = jembossSettings.getProperty(publicSoapServiceName); tmp = jembossSettings.getProperty(debugName); debug = new Boolean(tmp).booleanValue(); tmp = jembossSettings.getProperty(hasBatchModeName); hasBatchMode = new Boolean(tmp).booleanValue(); tmp = jembossSettings.getProperty(hasInteractiveModeName); hasInteractiveMode = new Boolean(tmp).booleanValue(); currentMode = jembossSettings.getProperty(currentModeName); serverPublicList = jembossSettings.getProperty(serverPublicListName); serverPrivateList = jembossSettings.getProperty(serverPrivateListName); // serviceUserName = jembossSettings.getProperty(serviceUserNameName); } catch (Exception e) { } } /** * * Initialize the server redundancy data. This is a separate * method because the server info might not be initialized in * the constructor, but may be imported later from the command line. * */ protected void setupServerRedundancy() { if (!serverPublicList.equals("")) { if(debug) System.out.println("JembossParams: Redundant public servers\n " +serverPublicList); publicServerFailOver = true; StringTokenizer tok = new StringTokenizer(serverPublicList,"|"); while (tok.hasMoreTokens()) { String toks = tok.nextToken(); publicServers.add(toks); if(debug) System.out.println(" Entry " + toks); serverStatusHash.put(toks, new Integer(SERVER_OK)); } } if(!serverPrivateList.equals("")) { if(debug) System.out.println("JembossParams: Redundant private servers\n " +serverPrivateList); privateServerFailOver = true; StringTokenizer tok = new StringTokenizer(serverPrivateList,"|"); while (tok.hasMoreTokens()) { String toks = tok.nextToken(); privateServers.add(toks); if(debug) System.out.println(" Entry " + toks); serverStatusHash.put(toks,new Integer(SERVER_OK)); } } } /** * * If using a proxy server * */ public boolean getUseProxy() { return useProxy; } /** * * If using an https proxy server * */ public boolean getUseHTTPSProxy() { return useHTTPSProxy; } /** * * If using a proxy server for a given URL * @param s the URL we wish to connect to * */ public boolean getUseProxy(String s) { if(proxyOverride) return useProxy; else { if(!useJavaProxy) return useProxy; else { boolean jp = true; if (useJavaNoProxy) { int ip = javaNoProxyEntries.size(); for(int j = 0 ; j